1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | |
3 | template<typename T> |
4 | struct X0 { |
5 | void f(T&); |
6 | |
7 | struct Inner; |
8 | |
9 | static T static_var; |
10 | }; |
11 | |
12 | template<typename T> |
13 | void X0<T>::f(T& t) { |
14 | t = 1; // expected-error{{incompatible type}} |
15 | } |
16 | |
17 | template<typename T> |
18 | struct X0<T>::Inner { |
19 | T member; |
20 | }; |
21 | |
22 | template<typename T> |
23 | T X0<T>::static_var = 1; // expected-error{{cannot initialize}} |
24 | |
25 | extern template struct X0<void*>; |
26 | template struct X0<void*>; // expected-note 2{{instantiation}} |
27 | |
28 | template struct X0<int>; // expected-note 4{{explicit instantiation definition is here}} |
29 | |
30 | extern template void X0<int>::f(int&); // expected-error{{follows explicit instantiation definition}} |
31 | extern template struct X0<int>::Inner; // expected-error{{follows explicit instantiation definition}} |
32 | extern template int X0<int>::static_var; // expected-error{{follows explicit instantiation definition}} |
33 | extern template struct X0<int>; // expected-error{{follows explicit instantiation definition}} |
34 | |