------- Comment #1 from sebor at roguewave dot com 2008-07-19 00:44 ------- This also fails. Seems that the combination of a copy ctor and template ctor (even non-throwing) trips the compiler up.
$ cat u.cpp && g++ u.cpp -std=c++0x && ./a.out #include <cassert> #include <type_traits> struct F { F (const F&) throw () { } template <class T> F (T) throw () { } }; int main () { assert (std::has_nothrow_copy_constructor<F>::value); assert (__has_nothrow_copy (F)); } a.out: u.cpp:12: int main(): Assertion `std::has_nothrow_copy_constructor<F>::value' failed. Aborted -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36871