reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
// RUN: %clang_cc1 -std=c++11 -verify %s
struct A { // expected-note 2{{candidate}}
  A(int); // expected-note {{candidate}}
  int n;
};
int a = A().n; // expected-error {{no matching constructor}}

struct B {
  B() = delete; // expected-note 4{{here}}
  int n;
};
int b = B().n; // expected-error {{call to deleted}}

struct C {
  B b; // expected-note {{deleted default constructor}}
};
int c = C().b.n; // expected-error {{call to implicitly-deleted default}}

struct D {
  D() = default; // expected-note {{here}} expected-warning {{implicitly deleted}}
  B b; // expected-note 2{{'b' has a deleted default constructor}}
};
int d = D().b.n; // expected-error {{call to implicitly-deleted default}}

struct E {
  E() = default;
  int n;
};
int e = E().n; // ok

struct F {
  F();
  int n;
};
int f = F().n; // ok

union G {
  F f; // expected-note {{non-trivial default constructor}}
};
int g = G().f.n; // expected-error {{call to implicitly-deleted default}}

struct H {
  int n;
private:
  H(); // expected-note {{here}}
};
int h = H().n; // expected-error {{private constructor}}

struct I {
  H h; // expected-note {{inaccessible default constructor}}
};
int i = I().h.n; // expected-error {{call to implicitly-deleted default}}

struct J {
  J();
  virtual int f();
  int n;
};
int j1 = J().n; // ok
int j2 = J().f(); // ok

union K {
  J j; // expected-note 2{{non-trivial default constructor}}
  int m;
};
int k1 = K().j.n; // expected-error {{call to implicitly-deleted default}}
int k2 = K().j.f(); // expected-error {{call to implicitly-deleted default}}