]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaTemplate/instantiate-non-dependent-types.cpp
Vendor import of clang trunk r238337:
[FreeBSD/FreeBSD.git] / test / SemaTemplate / instantiate-non-dependent-types.cpp
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