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 | |