The program below is expected to run with no assertions (template ctor is not a copy ctor). Instead, when compiled with gcc 4.3.0, it aborts.
$ cat u.cpp && g++ u.cpp -std=c++0x && ./a.out #include <cassert> #include <type_traits> struct A { template <class T> A (T) throw (int); }; struct B { B (B&) throw (); template <class T> B (T) throw (int); }; int main () { assert (std::has_nothrow_copy_constructor<A>::value); assert (__has_nothrow_copy (A)); assert (std::has_nothrow_copy_constructor<B>::value); assert (__has_nothrow_copy (B)); } a.out: u.cpp:12: int main(): Assertion `std::has_nothrow_copy_constructor<B>::value' failed. Aborted -- Summary: __has_nothrow_copy(T) false for T with a template ctor Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: sebor at roguewave dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36871