gcc GMOCKing接口时std::any的类型不完整

llycmphe  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(151)

我有一个非常奇怪的编译问题与这个片段:

#include <any>
#include <gmock/gmock.h>

struct Class
{
    virtual std::any get(int, int) = 0;
};

struct MockClass: Class
{
    MOCK_METHOD2(get, std::any(int, int));
};

int foo()
{
    MockClass dd;
}

错误gcc 9.1.0:

/usr/include/c++/9.1.0/type_traits:131:12: error: incomplete type ‘std::is_copy_constructible<testing::internal::ReferenceOrValueWrapper<std::any> >’ used in nested name specifier

叮当声8.0.0:

/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/9.1.0/../../../../include/c++/9.1.0/type_traits:132:31: error: no member named 'value' in 'std::is_copy_constructible<testing::internal::ReferenceOrValueWrapper<std::any> >'

如果我用std::string或任何其他通用类型替换std::any,代码将编译。

h7wcgrx3

h7wcgrx31#

这是libstdc的错误90415
我不确定std::any是什么原因导致了这个问题。请注意,您的示例在使用libstdc
时会在clang上失败,但在使用libc++时会成功。

z5btuh9x

z5btuh9x2#

关于这个问题的其他信息,我有一个变通办法,在gcc 9.1.0中使用any和gmock,使用std::experimental::fundamentals_v1::any而不是std::any,它工作正常。

相关问题