diff options
Diffstat (limited to 'test/SemaCXX/cxx11-user-defined-literals.cpp')
-rw-r--r-- | test/SemaCXX/cxx11-user-defined-literals.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/test/SemaCXX/cxx11-user-defined-literals.cpp b/test/SemaCXX/cxx11-user-defined-literals.cpp index f8bbcd960fd3..cb7796418ee3 100644 --- a/test/SemaCXX/cxx11-user-defined-literals.cpp +++ b/test/SemaCXX/cxx11-user-defined-literals.cpp @@ -141,3 +141,27 @@ namespace PR14950 { int operator"" _b(); // expected-error {{no function template matches function template specialization}} int main() { return 0_b; } // expected-error {{no matching literal operator for call to 'operator "" _b'}} } + +namespace bad_names { + template<char...> int operator""_x(); + + template<typename T> void f() { + class T:: // expected-error {{anonymous class}} expected-warning {{does not declare anything}} + operator // expected-error {{expected identifier}} + ""_q<'a'>; + + T::template operator""_q<'a'>(); // expected-error {{non-namespace scope 'T::' cannot have a literal operator member}} expected-error +{{}} + T::template operator""_q<'a'>::X; // expected-error {{non-namespace scope 'T::' cannot have a literal operator member}} expected-error +{{}} + T::operator""_q<'a'>(); // expected-error {{non-namespace scope 'T::' cannot have a literal operator member}} expected-error +{{}} + typename T::template operator""_q<'a'> a; // expected-error {{non-namespace scope 'T::' cannot have a literal operator member}} expected-error +{{}} + typename T::operator""_q(""); // expected-error +{{}} expected-note {{to match}} + T::operator""_q(""); // expected-error {{non-namespace scope 'T::' cannot have a literal operator member}} + + bad_names::operator""_x<'a', 'b', 'c'>(); + }; + + struct S {}; + void g() { + S::operator""_q(); // expected-error {{non-namespace scope 'S::' cannot have a literal operator member}} + } +} |