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 template<typename T>
      4 struct X1 {
      5   static void member() { T* x = 1; } // expected-error{{cannot initialize a variable of type 'int *' with an rvalue of type 'int'}}
      6 };
      7 
      8 template<void(*)()> struct instantiate { };
      9 
     10 template<typename T>
     11 struct X2 {
     12   typedef instantiate<&X1<int>::member> i; // expected-note{{in instantiation of}}
     13 };
     14 
     15 X2<int> x;
     16 
     17 template <class T, class A> class C {
     18 public:
     19   int i;
     20   void f(T &t) {
     21     T *q = new T();
     22     t.T::~T();
     23     q->~T();
     24     // expected-error@+2 {{'int' is not a class, namespace, or enumeration}}
     25     // expected-error@+1 {{no member named '~Colors' in 'Colors'}}
     26     q->A::~A();
     27     // expected-error@+2 {{no member named '~int' in 'Q'}}
     28     // expected-error@+1 {{no member named '~Colors' in 'Q'}}
     29     q->~A();
     30 
     31     delete q;
     32   }
     33 };
     34 
     35 class Q {
     36 public:
     37   Q() {}
     38   ~Q() {}
     39 };
     40 
     41 enum Colors {red, green, blue};
     42 
     43 C<Q, int> dummy;
     44 C<Q, Colors> dummyColors;
     45 int main() {
     46   Q qinst;
     47   // expected-note@+1 {{in instantiation of member function 'C<Q, int>::f' requested here}}
     48   dummy.f(qinst);
     49   // expected-note@+1 {{in instantiation of member function 'C<Q, Colors>::f' requested here}}
     50   dummyColors.f(qinst);
     51 }
     52 
     53