1 // RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s 2 3 template<typename T> 4 struct X0 { 5 void f(T &t) { 6 t = 1; // expected-error{{incompatible type}} 7 } 8 9 void g(T &t); 10 11 void h(T &t); 12 13 static T static_var; 14 }; 15 16 template<typename T> 17 inline void X0<T>::g(T & t) { 18 t = 1; // expected-error{{incompatible type}} 19 } 20 21 template<typename T> 22 void X0<T>::h(T & t) { 23 t = 1; 24 } 25 26 template<typename T> 27 T X0<T>::static_var = 1; 28 29 extern template struct X0<int*>; 30 31 int *&test(X0<int*> xi, int *ip) { 32 xi.f(ip); // expected-note{{instantiation}} 33 xi.g(ip); // expected-note{{instantiation}} 34 xi.h(ip); 35 return X0<int*>::static_var; 36 } 37 38 template<typename T> 39 void f0(T& t) { 40 t = 1; // expected-error{{incompatible type}} 41 } 42 43 template<typename T> 44 inline void f1(T& t) { 45 t = 1; // expected-error 2{{incompatible type}} 46 } 47 48 extern template void f0<>(int *&); 49 extern template void f1<>(int *&); 50 51 void test_f0(int *ip, float *fp) { 52 f0(ip); 53 f0(fp); // expected-note{{instantiation}} 54 } 55 56 void test_f1(int *ip, float *fp) { 57 f1(ip); // expected-note{{instantiation}} 58 f1(fp); // expected-note{{instantiation}} 59 } 60