// RUN: %clang_cc1 -std=c++11 %s -verify namespace PR15757 { struct S { }; template struct T { template T(X x, A &&a) {} template explicit T(A &&a) noexcept(noexcept(T(X(), static_cast(a)))) : T(X(), static_cast(a)) {} }; template struct U : T { using T::T; }; U foo(char ch) { return U(ch); } int main() { U a(42); U b('4'); return 0; } } namespace WrongIdent { struct A {}; struct B : A {}; struct C : B { using B::A; }; } namespace DefaultCtorConflict { struct A { A(int = 0); }; struct B : A { using A::A; } b; // ok, not ambiguous, inherited constructor suppresses implicit default constructor struct C { B b; } c; } namespace InvalidConstruction { struct A { A(int); }; struct B { B() = delete; }; struct C : A, B { using A::A; }; // Initialization here is performed as if by a defaulted default constructor, // which would be ill-formed (in the immediate context) in this case because // it would be defined as deleted. template void f(decltype(T(0))*); template int &f(...); int &r = f(0); } namespace ExplicitConv { struct B {}; struct D : B { // expected-note 3{{candidate}} using B::B; }; struct X { explicit operator B(); } x; struct Y { explicit operator D(); } y; D dx(x); // expected-error {{no matching constructor}} D dy(y); } namespace NestedListInit { struct B { B(); } b; // expected-note 3{{candidate}} struct D : B { // expected-note 14{{not viable}} using B::B; }; // This is a bit weird. We're allowed one pair of braces for overload // resolution, and one more pair of braces due to [over.ics.list]/2. B b1 = {b}; B b2 = {{b}}; B b3 = {{{b}}}; // expected-error {{no match}} // Per a proposed defect resolution, we don't get to call // D's version of B::B(const B&) here. D d0 = b; // expected-error {{no viable conversion}} D d1 = {b}; // expected-error {{no match}} D d2 = {{b}}; // expected-error {{no match}} D d3 = {{{b}}}; // expected-error {{no match}} D d4 = {{{{b}}}}; // expected-error {{no match}} } namespace PR31606 { // PR31606: as part of a proposed defect resolution, do not consider // inherited constructors that would be copy constructors for any class // between the declaring class and the constructed class (inclusive). struct Base {}; struct A : Base { using Base::Base; bool operator==(A const &) const; // expected-note {{no known conversion from 'B' to 'const A' for 1st argument}} }; struct B : Base { using Base::Base; }; bool a = A{} == A{}; // Note, we do *not* allow operator=='s argument to use the inherited A::A(Base&&) constructor to construct from B{}. bool b = A{} == B{}; // expected-error {{invalid operands}} } namespace implicit_member_srcloc { template struct S3 { }; template struct S2 { S2(S3 &&); }; template struct S1 : S2 { using S2::S2; S1(); }; template struct S0 { S0(); S0(S0&&) = default; S1 m1; }; void foo1() { S0 s0; } } namespace PR47555 { struct A { constexpr A(int) {} }; struct B : A { using A::A; }; template void f() { constexpr B b = 0; }; template void f(); } namespace PR48545 { struct B { void f(); private: B(int, int = 0); }; struct D : B { using B::B; }; void B::f() { D{0}; D{0, 0}; D(0); D(0, 0); D u = {0}; D v = {0, 0}; D w{0}; D x{0, 0}; D y(0); D z(0, 0); } }