Home | History | Annotate | Download | only in SemaTemplate
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
      3 
      4 template<typename T> class vector2 {};
      5 template<typename T> class vector : vector2<T> {};
      6 
      7 template<typename T> void Foo2(vector2<const T*> V) {}  // expected-note{{candidate template ignored: cannot deduce a type for 'T' that would make 'const T' equal 'int'}}
      8 template<typename T> void Foo(vector<const T*> V) {} // expected-note {{candidate template ignored: cannot deduce a type for 'T' that would make 'const T' equal 'int'}}
      9 
     10 void test() {
     11   Foo2(vector2<int*>());  // expected-error{{no matching function for call to 'Foo2'}}
     12   Foo(vector<int*>());  // expected-error{{no matching function for call to 'Foo'}}
     13 }
     14 
     15 namespace rdar13267210 {
     16   template < typename T > class A {
     17     BaseTy; // expected-error{{C++ requires a type specifier for all declarations}}
     18   };
     19 
     20   template < typename T, int N > class C: A < T > {};
     21 
     22   class B {
     23     C<long, 16> ExternalDefinitions;
     24     C<long, 64> &Record;
     25 
     26     void AddSourceLocation(A<long> &R); // expected-note{{passing argument to parameter 'R' here}}
     27     void AddTemplateKWAndArgsInfo() {
     28       AddSourceLocation(Record); // expected-error{{non-const lvalue reference to type}}
     29     }
     30   };
     31 }
     32 
     33 namespace PR16292 {
     34   class IncompleteClass;  // expected-note{{forward declaration}}
     35   class BaseClass {
     36     IncompleteClass Foo;  // expected-error{{field has incomplete type}}
     37   };
     38   template<class T> class DerivedClass : public BaseClass {};
     39   void* p = new DerivedClass<void>;
     40 }
     41 
     42 namespace rdar14183893 {
     43   class Typ { // expected-note {{not complete}}
     44     Typ x; // expected-error {{incomplete type}}
     45   };
     46 
     47   template <unsigned  C> class B :  Typ {};
     48   typedef B<0> TFP;
     49 
     50   class A {
     51     TFP m_p;
     52     void Enable() { 0, A(); } // expected-warning {{unused}}
     53   };
     54 }
     55