The current implementation returns misleading results if used the wrong way. A simple example is:
#include <iostream> struct X; int main() { std::cout << __is_abstract(X) << std::endl; } compiles and prints "0". Things get worse when templates are involved. PR libstdc++/39405 shows why this can be a real problem. I attach the example code from 39405 to this PR again. -- Summary: c++0x type-traits should error out in case of incompleteness Product: gcc Version: 4.3.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: d dot frey at gmx dot de http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39475