1b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith// RUN: %clang_cc1 -std=c++11 %s -verify 2b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith 3b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith// expected-no-diagnostics 4b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith 5b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smithnamespace PR15757 { 6b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith struct S { 7b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith }; 8b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith 9b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith template<typename X, typename Y> struct T { 10b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith template<typename A> T(X x, A &&a) {} 11b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith 12b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith template<typename A> explicit T(A &&a) 13b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith noexcept(noexcept(T(X(), static_cast<A &&>(a)))) 14b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith : T(X(), static_cast<A &&>(a)) {} 15b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith }; 16b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith 17b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith template<typename X, typename Y> struct U : T<X, Y> { 18b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith using T<X, Y>::T; 19b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith }; 20b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith 21b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith U<S, char> foo(char ch) { return U<S, char>(ch); } 22b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith 23b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith int main() { 24b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith U<S, int> a(42); 25b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith U<S, char> b('4'); 26b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith return 0; 27b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith } 28b5eb3f5bf383807103dc1377a124fd96ee21d02aRichard Smith} 296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesnamespace WrongIdent { 316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines struct A {}; 326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines struct B : A {}; 336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines struct C : B { 346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines using B::A; 356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines }; 366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 37