| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| |
| struct NonDefaultConstructible { |
| NonDefaultConstructible(const NonDefaultConstructible&); // expected-note{{candidate constructor}} |
| }; |
| |
| template<typename T, typename U> |
| struct X { |
| static T member; |
| }; |
| |
| template<typename T, typename U> |
| T X<T, U>::member; // expected-error{{no matching constructor}} |
| |
| // Okay; this is a declaration, not a definition. |
| template<> |
| NonDefaultConstructible X<NonDefaultConstructible, long>::member; |
| |
| NonDefaultConstructible &test(bool b) { |
| return b? X<NonDefaultConstructible, int>::member // expected-note{{instantiation}} |
| : X<NonDefaultConstructible, long>::member; |
| } |
| |
| namespace rdar9422013 { |
| template<int> |
| struct X { |
| struct Inner { |
| static unsigned array[17]; |
| }; |
| }; |
| |
| template<> unsigned X<1>::Inner::array[]; // okay |
| } |