1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 #include <stddef.h> 3 4 struct A { 5 void *operator new(size_t); 6 }; 7 8 namespace NS { 9 void *operator new(size_t);; // expected-error {{'operator new' cannot be declared inside a namespace}} 10 } 11 12 static void *operator new(size_t); // expected-error {{'operator new' cannot be declared static in global scope}} 13 14 struct B { 15 void operator new(size_t); // expected-error {{'operator new' must return type 'void *'}} 16 }; 17 18 struct C { 19 void *operator new(); // expected-error {{'operator new' must have at least one parameter}} 20 }; 21 22 struct D { 23 void *operator new(bool); // expected-error {{'operator new' takes type size_t}} 24 }; 25 26 struct E { 27 void *operator new(size_t = 0); // expected-error {{parameter of 'operator new' cannot have a default argument}} 28 }; 29 30 struct F { 31 template<typename T> void *operator new(size_t, int); 32 }; 33 34 struct G { 35 template<typename T> T operator new(size_t, int); // expected-error {{'operator new' cannot have a dependent return type; use 'void *' instead}} 36 }; 37 38 struct H { 39 template<typename T> void *operator new(T, int); // expected-error {{'operator new' cannot take a dependent type as first parameter; use size_t}} 40 }; 41 42 struct I { 43 template<typename T> void *operator new(size_t); // expected-error {{'operator new' template must have at least two parameters}} 44 }; 45