Betrachten wir ein kleines Standalone-Betrieb Fall, in dem ich feststellen möchten, ob ein Typ eine vollständige oder unvollständige Verwendunggcc 6.1 std :: result_of Kompilierungsfehler
#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;
}
Das mit gcc 4.9.3
mit --std=c++11
Flagge fein kompiliert. Doch mit gcc 6.1
und --std=c++11
es produziert ein compilation error als
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();
Was bin ich hier? Was könnte eine mögliche Arbeit sein?
Sieht aus wie eine g ++ -Regression – Arunmu
@Arunmu Sollte g ++ 'operator() (...)' dann? Es versucht, eine Kopie eines unvollständigen Typs –
zu erstellen. Haben Sie es ohne anonymen 'Namespace' versucht, d. H. Verwenden Sie stattdessen einen benannten. – user3405291