34 lines
831 B
C++
34 lines
831 B
C++
// 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
|
|
}
|