1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 template<class X, class Y, class Z> X f(Y,Z); // expected-note {{candidate template ignored: couldn't infer template argument 'X'}} 4 5 void g() { 6 f<int,char*,double>("aa",3.0); // expected-warning{{conversion from string literal to 'char *' is deprecated}} 7 f<int,char*>("aa",3.0); // Z is deduced to be double \ 8 // expected-warning{{conversion from string literal to 'char *' is deprecated}} 9 f<int>("aa",3.0); // Y is deduced to be char*, and 10 // Z is deduced to be double 11 f("aa",3.0); // expected-error{{no matching}} 12 } 13 14 // PR5910 15 namespace PR5910 { 16 template <typename T> 17 void Func() {} 18 19 template <typename R> 20 void Foo(R (*fp)()); 21 22 void Test() { 23 Foo(Func<int>); 24 } 25 } 26 27 // PR5949 28 namespace PR5949 { 29 struct Bar; 30 31 template <class Container> 32 void quuz(const Container &cont) { 33 } 34 35 template<typename T> 36 int Foo(Bar *b, void (*Baz)(const T &t), T * = 0) { 37 return 0; 38 } 39 40 template<typename T> 41 int Quux(Bar *b, T * = 0) 42 { 43 return Foo<T>(b, quuz); 44 } 45 } 46 47 // PR7641 48 namespace PR7641 { 49 namespace N2 50 { 51 template<class> 52 int f0(int); 53 } 54 namespace N 55 { 56 using N2::f0; 57 } 58 59 template<class R,class B1> 60 int 61 f1(R(a)(B1)); 62 63 void f2() 64 { f1(N::f0<int>); } 65 } 66