Considérons un petit cas d'utilisation autonome dans laquelle je veux déterminer si un type est complet ou incomplet en utilisantgcc 6.1 std :: erreur de compilation result_of
#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;
}
Cette compile très bien avec gcc 4.9.3
avec --std=c++11
drapeau. Cependant, avec gcc 6.1
et --std=c++11
il produit un compilation error comme
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();
Qu'est-ce que je manque ici? Quel pourrait être un travail possible?
Ressemble à une régression g ++ – Arunmu
@Arunmu G ++ devrait-il choisir 'operator() (...)' alors? Il tente de faire une copie d'un type incomplet. –
L'avez-vous essayé sans "namespace" anonyme, c'est-à-dire en utilisant un nom nommé à la place. – user3405291