13573b2c84372d9484296fa658f5276f6c09acb92Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2ecd63b87e626bbf6b47d9eb828553d5857fb85eeDouglas Gregor 3011323d90dd2c1ff2db6e1871154831885f2d7cbJohn McCalltemplate<class X, class Y, class Z> X f(Y,Z); // expected-note {{candidate template ignored: couldn't infer template argument 'X'}} 4ecd63b87e626bbf6b47d9eb828553d5857fb85eeDouglas Gregor 5ecd63b87e626bbf6b47d9eb828553d5857fb85eeDouglas Gregorvoid g() { 697d35a2f4f6cb1cc51e48cfd1841c7fd5a5f5377Douglas Gregor f<int,char*,double>("aa",3.0); // expected-warning{{conversion from string literal to 'char *' is deprecated}} 797d35a2f4f6cb1cc51e48cfd1841c7fd5a5f5377Douglas Gregor f<int,char*>("aa",3.0); // Z is deduced to be double \ 897d35a2f4f6cb1cc51e48cfd1841c7fd5a5f5377Douglas Gregor // expected-warning{{conversion from string literal to 'char *' is deprecated}} 9ecd63b87e626bbf6b47d9eb828553d5857fb85eeDouglas Gregor f<int>("aa",3.0); // Y is deduced to be char*, and 10ecd63b87e626bbf6b47d9eb828553d5857fb85eeDouglas Gregor // Z is deduced to be double 11ecd63b87e626bbf6b47d9eb828553d5857fb85eeDouglas Gregor f("aa",3.0); // expected-error{{no matching}} 12b56fd0b9080fae81e36cfd73dd740f0e06a4815dOwen Anderson} 1358253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor 1458253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor// PR5910 1558253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregornamespace PR5910 { 1658253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor template <typename T> 1758253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor void Func() {} 1858253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor 1958253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor template <typename R> 2058253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor void Foo(R (*fp)()); 2158253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor 2258253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor void Test() { 2358253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor Foo(Func<int>); 2458253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor } 2558253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor} 2658253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor 2758253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor// PR5949 2858253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregornamespace PR5949 { 2958253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor struct Bar; 3058253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor 3158253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor template <class Container> 3258253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor void quuz(const Container &cont) { 3358253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor } 3458253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor 3558253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor template<typename T> 3658253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor int Foo(Bar *b, void (*Baz)(const T &t), T * = 0) { 3758253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor return 0; 3858253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor } 3958253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor 4058253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor template<typename T> 4158253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor int Quux(Bar *b, T * = 0) 4258253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor { 4358253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor return Foo<T>(b, quuz); 4458253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor } 4558253a580a747ded47eaf7d89c2b4e8a050a9dddDouglas Gregor} 46229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor 47229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor// PR7641 48229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregornamespace PR7641 { 49229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor namespace N2 50229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor { 51229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor template<class> 52229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor int f0(int); 53229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor } 54229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor namespace N 55229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor { 56229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor using N2::f0; 57229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor } 58229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor 59229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor template<class R,class B1> 60229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor int 61229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor f1(R(a)(B1)); 62229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor 63229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor void f2() 64229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor { f1(N::f0<int>); } 65229f3b3ebd5cee39a2cc81e2f707de5a7e88ddfdDouglas Gregor} 66