1 // PR c++/38796 2 // { dg-do compile { target c++11 } } 3 4 #define SA(X) static_assert ((X), #X) 5 6 struct A 7 { 8 A (int); 9 A (const A& = 1) = default; // { dg-error "default argument" } 10 void operator= (const A&) = default; // { dg-error "defaulted|match" } 11 }; 12 13 struct B 14 { 15 private: 16 B() = default; 17 }; 18 19 SA(__has_trivial_constructor(B)); 20 21 struct C 22 { 23 protected: 24 ~C() = default; 25 }; 26 27 SA(__has_trivial_destructor(C)); 28 29 struct D 30 { 31 private: 32 D& operator= (const D&) = default; 33 }; 34 35 SA(__has_trivial_assign(D)); 36 37 struct E 38 { 39 explicit E (const E&) = default; 40 }; 41 42 SA(__has_trivial_copy(E)); 43 44 struct F 45 { 46 F(F&) = default; 47 }; 48 49 struct G: public F 50 { 51 // Can't be const because F copy ctor isn't. 52 G(const G&) = default; // { dg-error "const" } 53 }; 54 55 struct H 56 { 57 virtual ~H() = default; 58 }; 59