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 {
memberX15   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;
f(T & t)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:
Q()37   Q() {}
~Q()38   ~Q() {}
39 };
40 
41 enum Colors {red, green, blue};
42 
43 C<Q, int> dummy;
44 C<Q, Colors> dummyColors;
main()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