From Jason Turner

[class.inhctor.init]

Diff to HTML by rtfpessoa

tmp/tmpijfbcvzp/{from.md → to.md} RENAMED
@@ -29,28 +29,28 @@ struct D1 : B1 {
29
  int x;
30
  int y = get();
31
  };
32
 
33
  void test() {
34
- D1 d(2, 3, 4); // OK: B1 is initialized by calling B1(2, 3, 4),
35
  // then d.x is default-initialized (no initialization is performed),
36
  // then d.y is initialized by calling get()
37
- D1 e; // error: D1 has a deleted default constructor
38
  }
39
 
40
  struct D2 : B2 {
41
  using B2::B2;
42
  B1 b;
43
  };
44
 
45
- D2 f(1.0); // error: B1 has a deleted default constructor
46
 
47
  struct W { W(int); };
48
  struct X : virtual W { using W::W; X() = delete; };
49
  struct Y : X { using X::X; };
50
  struct Z : Y, virtual W { using Y::Y; };
51
- Z z(0); // OK: initialization of Y does not invoke default constructor of X
52
 
53
  template<class T> struct Log : T {
54
  using T::T; // inherits all constructors from class T
55
  ~Log() { std::clog << "Destroying wrapper" << std::endl; }
56
  };
@@ -86,18 +86,18 @@ struct D2 : V1, V2 {
86
  using V1::V1;
87
  using V2::V2;
88
  };
89
 
90
  D1 d1(0); // error: ambiguous
91
- D2 d2(0); // OK: initializes virtual B base class, which initializes the A base class
92
  // then initializes the V1 and V2 base classes as if by a defaulted default constructor
93
 
94
  struct M { M(); M(int); };
95
  struct N : M { using M::M; };
96
  struct O : M {};
97
  struct P : N, O { using N::N; using O::O; };
98
- P p(0); // OK: use M(0) to initialize N's base class,
99
  // use M() to initialize O's base class
100
  ```
101
 
102
  — *end example*]
103
 
 
29
  int x;
30
  int y = get();
31
  };
32
 
33
  void test() {
34
+ D1 d(2, 3, 4); // OK, B1 is initialized by calling B1(2, 3, 4),
35
  // then d.x is default-initialized (no initialization is performed),
36
  // then d.y is initialized by calling get()
37
+ D1 e; // error: D1 has no default constructor
38
  }
39
 
40
  struct D2 : B2 {
41
  using B2::B2;
42
  B1 b;
43
  };
44
 
45
+ D2 f(1.0); // error: B1 has no default constructor
46
 
47
  struct W { W(int); };
48
  struct X : virtual W { using W::W; X() = delete; };
49
  struct Y : X { using X::X; };
50
  struct Z : Y, virtual W { using Y::Y; };
51
+ Z z(0); // OK, initialization of Y does not invoke default constructor of X
52
 
53
  template<class T> struct Log : T {
54
  using T::T; // inherits all constructors from class T
55
  ~Log() { std::clog << "Destroying wrapper" << std::endl; }
56
  };
 
86
  using V1::V1;
87
  using V2::V2;
88
  };
89
 
90
  D1 d1(0); // error: ambiguous
91
+ D2 d2(0); // OK, initializes virtual B base class, which initializes the A base class
92
  // then initializes the V1 and V2 base classes as if by a defaulted default constructor
93
 
94
  struct M { M(); M(int); };
95
  struct N : M { using M::M; };
96
  struct O : M {};
97
  struct P : N, O { using N::N; using O::O; };
98
+ P p(0); // OK, use M(0) to initialize N's base class,
99
  // use M() to initialize O's base class
100
  ```
101
 
102
  — *end example*]
103