| // RUN: %clang_cc1 -fsyntax-only -verify -fexceptions %s |
| typedef __SIZE_TYPE__ size_t; |
| |
| // Operator delete template for placement new with global lookup |
| template<int I> |
| struct X0 { |
| X0(); |
| |
| static void* operator new(size_t) { |
| return I; // expected-error{{cannot initialize}} |
| } |
| |
| static void operator delete(void*) { |
| int *ip = I; // expected-error{{cannot initialize}} |
| } |
| }; |
| |
| void test_X0() { |
| // Using the global operator new suppresses the search for a |
| // operator delete in the class. |
| ::new X0<2>; |
| |
| new X0<3>; // expected-note 2{{instantiation}} |
| } |
| |
| // Operator delete template for placement new[] with global lookup |
| template<int I> |
| struct X1 { |
| X1(); |
| |
| static void* operator new[](size_t) { |
| return I; // expected-error{{cannot initialize}} |
| } |
| |
| static void operator delete[](void*) { |
| int *ip = I; // expected-error{{cannot initialize}} |
| } |
| }; |
| |
| void test_X1() { |
| // Using the global operator new suppresses the search for a |
| // operator delete in the class. |
| ::new X1<2> [17]; |
| |
| new X1<3> [17]; // expected-note 2{{instantiation}} |
| } |