Home | History | Annotate | Download | only in over.literal
      1 // RUN: %clang_cc1 -std=c++11 %s -verify
      2 
      3 void operator "" _a(const char *);
      4 
      5 namespace N {
      6   using ::operator "" _a;
      7 
      8   void operator "" _b(const char *);
      9 }
     10 
     11 using N::operator "" _b;
     12 
     13 class C {
     14   void operator "" _c(const char *); // expected-error {{must be in a namespace or global scope}}
     15 
     16   static void operator "" _c(unsigned long long); // expected-error {{must be in a namespace or global scope}}
     17 
     18   friend void operator "" _d(const char *);
     19 };
     20 
     21 int operator "" _e; // expected-error {{cannot be the name of a variable}}
     22 
     23 void f() {
     24   int operator "" _f; // expected-error {{cannot be the name of a variable}}
     25 }
     26 
     27 extern "C++" {
     28   void operator "" _g(const char *);
     29 }
     30 
     31 template<char...> void operator "" _h() {}
     32 
     33 template<> void operator "" _h<'a', 'b', 'c'>() {}
     34 
     35 template void operator "" _h<'a', 'b', 'c', 'd'>();
     36 
     37 namespace rdar13605348 {
     38 
     39 class C {
     40   double operator"" _x(long double value) { return double(value); } // expected-error{{literal operator 'operator "" _x' must be in a namespace or global scope}}
     41   double value() { return 3.2_x; } // expected-error{{no matching literal operator for call to}}
     42 };
     43 
     44 }
     45