// { dg-do compile { target c++11 } } struct A { }; struct B { B(); operator int(); }; struct C { C() = default; C(const C&); C(C&&) = default; C& operator=(C&&); C& operator= (const C&) = default; }; struct D { ~D() noexcept(false) {} }; #define SA(X) static_assert((X),#X) SA(__is_nothrow_constructible(A)); SA(__is_nothrow_constructible(A,A)); SA(!__is_nothrow_constructible(B)); SA(__is_nothrow_constructible(B,B)); SA(!__is_nothrow_constructible(A,B)); SA(!__is_nothrow_constructible(B,A)); SA(__is_nothrow_constructible(C)); SA(__is_nothrow_constructible(C,C)); SA(!__is_nothrow_constructible(C,C&)); SA(__is_nothrow_assignable(C,C&)); SA(!__is_nothrow_assignable(C,C)); SA(!__is_nothrow_assignable(C,C&&)); SA(!__is_nothrow_assignable(void,int)); SA(!__is_nothrow_assignable(const void,int)); SA(!__is_nothrow_assignable(volatile void,int)); SA(!__is_nothrow_assignable(const volatile void,int)); SA(__is_nothrow_constructible(int,int)); SA(__is_nothrow_constructible(int,double)); SA(!__is_nothrow_constructible(int,B)); SA(!__is_nothrow_constructible(void,int)); SA(!__is_nothrow_constructible(const void,int)); SA(!__is_nothrow_constructible(volatile void,int)); SA(!__is_nothrow_constructible(const volatile void,int)); SA(!__is_nothrow_constructible(int, void*)); SA(!__is_nothrow_constructible(int, int*)); SA(!__is_nothrow_constructible(int, const int*)); SA(!__is_nothrow_constructible(int*, void*)); SA(!__is_nothrow_constructible(int*, const int*)); SA(!__is_nothrow_constructible(D));