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

Reply via email to