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