// RUN: %clang_cc1 -std=c++11 %s -verify // expected-no-diagnostics namespace PR15757 { struct S { }; template<typename X, typename Y> struct T { template<typename A> T(X x, A &&a) {} template<typename A> explicit T(A &&a) noexcept(noexcept(T(X(), static_cast<A &&>(a)))) : T(X(), static_cast<A &&>(a)) {} }; template<typename X, typename Y> struct U : T<X, Y> { using T<X, Y>::T; }; U<S, char> foo(char ch) { return U<S, char>(ch); } int main() { U<S, int> a(42); U<S, char> 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<typename T> void f(decltype(T(0))*); template<typename T> int &f(...); int &r = f<C>(0); }