1 // RUN: %clang_cc1 -std=c++11 %s -verify 2 3 // expected-no-diagnostics 4 5 namespace PR15757 { 6 struct S { 7 }; 8 9 template<typename X, typename Y> struct T { TPR15757::T10 template<typename A> T(X x, A &&a) {} 11 TPR15757::T12 template<typename A> explicit T(A &&a) 13 noexcept(noexcept(T(X(), static_cast<A &&>(a)))) 14 : T(X(), static_cast<A &&>(a)) {} 15 }; 16 17 template<typename X, typename Y> struct U : T<X, Y> { 18 using T<X, Y>::T; 19 }; 20 foo(char ch)21 U<S, char> foo(char ch) { return U<S, char>(ch); } 22 main()23 int main() { 24 U<S, int> a(42); 25 U<S, char> b('4'); 26 return 0; 27 } 28 } 29 30 namespace WrongIdent { 31 struct A {}; 32 struct B : A {}; 33 struct C : B { 34 using B::A; 35 }; 36 } 37 38 namespace DefaultCtorConflict { 39 struct A { A(int = 0); }; 40 struct B : A { 41 using A::A; 42 } b; // ok, not ambiguous, inherited constructor suppresses implicit default constructor 43 struct C { 44 B b; 45 } c; 46 } 47 48 namespace InvalidConstruction { 49 struct A { A(int); }; 50 struct B { B() = delete; }; 51 struct C : A, B { using A::A; }; 52 // Initialization here is performed as if by a defaulted default constructor, 53 // which would be ill-formed (in the immediate context) in this case because 54 // it would be defined as deleted. 55 template<typename T> void f(decltype(T(0))*); 56 template<typename T> int &f(...); 57 int &r = f<C>(0); 58 } 59