Clang Project

clang_source_code/test/SemaCUDA/inherited-ctor.cu
1// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
2
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;
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