// RUN: %clang_cc1 -fsyntax-only -verify %s // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s template X f(Y,Z); // expected-note {{candidate template ignored: couldn't infer template argument 'X'}} void g() { f("aa",3.0); #if __cplusplus <= 199711L // C++03 or earlier modes // expected-warning@-2{{conversion from string literal to 'char *' is deprecated}} #else // expected-warning@-4{{ISO C++11 does not allow conversion from string literal to 'char *'}} #endif f("aa",3.0); // Z is deduced to be double #if __cplusplus <= 199711L // expected-warning@-2{{conversion from string literal to 'char *' is deprecated}} #else // expected-warning@-4{{ISO C++11 does not allow conversion from string literal to 'char *'}} #endif f("aa",3.0); // Y is deduced to be char*, and // Z is deduced to be double f("aa",3.0); // expected-error{{no matching}} } // PR5910 namespace PR5910 { template void Func() {} template void Foo(R (*fp)()); void Test() { Foo(Func); } } // PR5949 namespace PR5949 { struct Bar; template void quuz(const Container &cont) { } template int Foo(Bar *b, void (*Baz)(const T &t), T * = 0) { return 0; } template int Quux(Bar *b, T * = 0) { return Foo(b, quuz); } } // PR7641 namespace PR7641 { namespace N2 { template int f0(int); } namespace N { using N2::f0; } template int f1(R(a)(B1)); void f2() { f1(N::f0); } }