1// PR c++/54987 2 3struct Argument1 4{ 5}; 6 7struct Argument2 8{ 9}; 10 11template<typename T> 12struct Template1 13{ 14 Template1() {} 15 16 template<typename Y> 17 Template1( const Template1<Y>& ) {} 18}; 19 20template<typename T> 21struct Template2 22{ 23 Template2() {} 24 25 template<typename Y> 26 Template2( const Template1<Y>& ) {} 27}; 28 29template <typename T> 30struct make_type 31{ 32 typedef Argument1 type; 33}; 34 35template<typename T> 36void foo( T, Template1<typename make_type<T>::type> ) 37{ 38} 39 40template<typename T> 41void foo( T, Template2<typename make_type<T>::type> ) 42{ 43} 44 45int main() 46{ 47 Template1<Argument2> t; 48 Argument1 a; 49 foo( a, t ); // { dg-error "ambiguous" } 50 return 0; 51} 52