// PR c++/51424 // { dg-do compile { target c++11 } } template struct S { S() : S() {} // { dg-error "delegates to itself" } S(int x) : S(x) {} // { dg-error "delegates to itself" } }; struct B1 { B1() : B1() {} // { dg-error "delegates to itself" } B1(int y) : B1(y) {} // { dg-error "delegates to itself" } }; struct V1 : virtual B1 { V1() : B1() {} V1(int x) : B1(x) {} }; struct B2 { B2() : B2() {} // { dg-error "delegates to itself" } B2(int y) : B2(y) {} // { dg-error "delegates to itself" } }; struct V2 : virtual B2 { V2() : V2() {} // { dg-error "delegates to itself" } V2(int x) : V2(x) {} // { dg-error "delegates to itself" } }; struct B3 { B3() {} B3(int y) {} }; struct V3 : virtual B3 { V3() : V3() {} // { dg-error "delegates to itself" } V3(int x) : V3(x) {} // { dg-error "delegates to itself" } }; struct CE1 { constexpr CE1() : CE1() {} // { dg-error "delegates to itself" } constexpr CE1(int x) : CE1(x) {} // { dg-error "delegates to itself" } }; struct CEB2 { constexpr CEB2() : CEB2() {} // { dg-error "delegates to itself" } constexpr CEB2(int x) : CEB2(x) {} // { dg-error "delegates to itself" } }; struct CE2 : CEB2 { constexpr CE2() : CEB2() {} constexpr CE2(int x) : CEB2(x) {} }; S s1; S s2(1);