| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| |
| template<typename T> |
| struct X0 { |
| struct MemberClass { |
| T member; // expected-error{{with function type}} |
| }; |
| |
| T* f0(T* ptr) { |
| return ptr + 1; // expected-error{{pointer to the function}} |
| } |
| |
| static T* static_member; |
| }; |
| |
| template<typename T> |
| T* X0<T>::static_member = ((T*)0) + 1; // expected-error{{pointer to the function}} |
| |
| template class X0<int>; // okay |
| |
| template class X0<int(int)>; // expected-note 3{{requested here}} |
| |
| // Specialize everything, so that the explicit instantiation does not trigger |
| // any diagnostics. |
| template<> |
| struct X0<int(long)>::MemberClass { }; |
| |
| typedef int int_long_func(long); |
| template<> |
| int_long_func *X0<int_long_func>::f0(int_long_func *) { return 0; } |
| |
| template<> |
| int_long_func *X0<int(long)>::static_member; |
| |
| template class X0<int(long)>; |
| |