struct ClassWithImplicitCtor { int foo() { return 1; } }; struct ClassWithDefaultedCtor { ClassWithDefaultedCtor() = default; int foo() { return 2; } }; struct ClassWithOneCtor { int value; ClassWithOneCtor(int i) { value = i; } }; struct ClassWithMultipleCtor { int value; ClassWithMultipleCtor(int i) { value = i; } ClassWithMultipleCtor(int i, int v) { value = v + i; } }; struct ClassWithDeletedCtor { int value; ClassWithDeletedCtor() { value = 6; } ClassWithDeletedCtor(int i) = delete; }; struct ClassWithDeletedDefaultCtor { int value; ClassWithDeletedDefaultCtor() = delete; ClassWithDeletedDefaultCtor(int i) { value = i; } }; int main() { ClassWithImplicitCtor C1; C1.foo(); ClassWithDefaultedCtor C2; C2.foo(); ClassWithOneCtor C3(22); ClassWithMultipleCtor C4(23); ClassWithMultipleCtor C5(24, 25); ClassWithDeletedCtor C6; ClassWithDeletedDefaultCtor C7(26); return 0; // break here }