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