53 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify=expected,precxx17 %std_cxx98-14 %s2// RUN: %clang_cc1 -fsyntax-only -verify %std_cxx17- %s3template<typename T>4struct X1 {5 static void member() { T* x = 1; } // precxx17-error{{cannot initialize a variable of type 'int *' with an rvalue of type 'int'}}6};7 8template<void(*)()> struct instantiate { };9 10template<typename T>11struct X2 {12 typedef instantiate<&X1<int>::member> i; // precxx17-note{{in instantiation of}}13};14 15X2<int> x;16 17template <class T, class A> class C {18public: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 35class Q {36public:37 Q() {}38 ~Q() {}39};40 41enum Colors {red, green, blue};42 43C<Q, int> dummy;44C<Q, Colors> dummyColors;45int 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