Home | History | Annotate | Download | only in expr.new
      1 // RUN: %clang_cc1 -fsyntax-only -verify -fexceptions %s
      2 typedef __SIZE_TYPE__ size_t;
      3 
      4 // Operator delete template for placement new with global lookup
      5 template<int I>
      6 struct X0 {
      7   X0();
      8 
      9   static void* operator new(size_t) {
     10     return I; // expected-error{{cannot initialize}}
     11   }
     12 
     13   static void operator delete(void*) {
     14     int *ip = I; // expected-error{{cannot initialize}}
     15   }
     16 };
     17 
     18 void test_X0() {
     19   // Using the global operator new suppresses the search for a
     20   // operator delete in the class.
     21   ::new X0<2>;
     22 
     23   new X0<3>; // expected-note 2{{instantiation}}
     24 }
     25 
     26 // Operator delete template for placement new[] with global lookup
     27 template<int I>
     28 struct X1 {
     29   X1();
     30 
     31   static void* operator new[](size_t) {
     32     return I; // expected-error{{cannot initialize}}
     33   }
     34 
     35   static void operator delete[](void*) {
     36     int *ip = I; // expected-error{{cannot initialize}}
     37   }
     38 };
     39 
     40 void test_X1() {
     41   // Using the global operator new suppresses the search for a
     42   // operator delete in the class.
     43   ::new X1<2> [17];
     44 
     45   new X1<3> [17]; // expected-note 2{{instantiation}}
     46 }
     47