90 lines · plain
1// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s2 3// Inherit a valid non-default ctor.4namespace NonDefaultCtorValid {5 struct A {6 A(const int &x) {}7 };8 9 struct B : A {10 using A::A;11 };12 13 struct C {14 struct B b;15 C() : b(0) {}16 };17 18 void test() {19 B b(0);20 C c;21 }22}23 24// Inherit an invalid non-default ctor.25// The inherited ctor is invalid because it is unable to initialize s.26namespace NonDefaultCtorInvalid {27 struct S {28 S() = delete;29 };30 struct A {31 A(const int &x) {}32 };33 34 struct B : A {35 using A::A;36 S s;37 };38 39 struct C {40 struct B b;41 C() : b(0) {} // expected-error{{constructor inherited by 'B' from base class 'A' is implicitly deleted}}42 // expected-note@-6{{constructor inherited by 'B' is implicitly deleted because field 's' has a deleted corresponding constructor}}43 // expected-note@-15{{'S' has been explicitly marked deleted here}}44 };45}46 47// Inherit a valid default ctor.48namespace DefaultCtorValid {49 struct A {50 A() {}51 };52 53 struct B : A {54 using A::A;55 };56 57 struct C {58 struct B b;59 C() {}60 };61 62 void test() {63 B b;64 C c;65 }66}67 68// Inherit an invalid default ctor.69// The inherited ctor is invalid because it is unable to initialize s.70namespace DefaultCtorInvalid {71 struct S {72 S() = delete;73 };74 struct A {75 A() {}76 };77 78 struct B : A {79 using A::A;80 S s;81 };82 83 struct C {84 struct B b; // expected-note{{default constructed field 'b' declared here}}85 C() {} // expected-error{{call to implicitly-deleted default constructor of 'struct B'}}86 // expected-note@-6{{default constructor of 'B' is implicitly deleted because field 's' has a deleted default constructor}}87 // expected-note@-15{{'S' has been explicitly marked deleted here}}88 };89}90