考虑一个小的独立用例,其中我想确定一个类型是完整的还是不完整的
#include <type_traits>
namespace {
struct foo {
template<class T, std::size_t = sizeof(T)>
std::false_type operator()(T&);
std::true_type operator()(...);
};
struct FooIncomplete;
}
int main() {
std::result_of<foo(FooIncomplete&)>::type();
return 0;
}
gcc 4.9.3
这与带有--std=c++11
标志的编译很好。但是,使用gcc 6.1
and它会--std=c++11
产生编译错误
main.cpp: In function 'int main()':
main.cpp:17:5: error: 'type' is not a member of 'std::result_of<{anonymous}::foo({anonymous}::FooIncomplete&)>'
std::result_of<foo(FooIncomplete&)>::type();
我在这里想念什么?有什么可能的解决方法?