Home | History | Annotate | Download | only in temp.arg.explicit
      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