18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -fsyntax-only -verify %s 2e363c8e1SAnders Carlsson #include <stddef.h> 3e363c8e1SAnders Carlsson 4e363c8e1SAnders Carlsson struct A { 5e363c8e1SAnders Carlsson void *operator new(size_t); 6e363c8e1SAnders Carlsson }; 7e363c8e1SAnders Carlsson 8e363c8e1SAnders Carlsson namespace NS { 9e363c8e1SAnders Carlsson void *operator new(size_t);; // expected-error {{'operator new' cannot be declared inside a namespace}} 10e363c8e1SAnders Carlsson } 11e363c8e1SAnders Carlsson 12*bdd14643SRichard Smith static void *operator new(size_t); // expected-error {{static declaration of 'operator new' follows non-static declaration}} expected-note {{previous}} 13*bdd14643SRichard Smith static void *operator new(size_t, int, int); // expected-error {{'operator new' cannot be declared static in global scope}} 147e0b207eSAnders Carlsson 157e0b207eSAnders Carlsson struct B { 167e0b207eSAnders Carlsson void operator new(size_t); // expected-error {{'operator new' must return type 'void *'}} 177e0b207eSAnders Carlsson }; 187e0b207eSAnders Carlsson 197e0b207eSAnders Carlsson struct C { 207e0b207eSAnders Carlsson void *operator new(); // expected-error {{'operator new' must have at least one parameter}} 217e0b207eSAnders Carlsson }; 227e0b207eSAnders Carlsson 237e0b207eSAnders Carlsson struct D { 24f5056f85SAnders Carlsson void *operator new(bool); // expected-error {{'operator new' takes type size_t}} 257e0b207eSAnders Carlsson }; 267e0b207eSAnders Carlsson 277e0b207eSAnders Carlsson struct E { 287e0b207eSAnders Carlsson void *operator new(size_t = 0); // expected-error {{parameter of 'operator new' cannot have a default argument}} 297e0b207eSAnders Carlsson }; 307e0b207eSAnders Carlsson 317e0b207eSAnders Carlsson struct F { 327e0b207eSAnders Carlsson template<typename T> void *operator new(size_t, int); 337e0b207eSAnders Carlsson }; 347e0b207eSAnders Carlsson 357e0b207eSAnders Carlsson struct G { 367e0b207eSAnders Carlsson template<typename T> T operator new(size_t, int); // expected-error {{'operator new' cannot have a dependent return type; use 'void *' instead}} 377e0b207eSAnders Carlsson }; 387e0b207eSAnders Carlsson 397e0b207eSAnders Carlsson struct H { 407e0b207eSAnders Carlsson template<typename T> void *operator new(T, int); // expected-error {{'operator new' cannot take a dependent type as first parameter; use size_t}} 417e0b207eSAnders Carlsson }; 427e0b207eSAnders Carlsson 437e0b207eSAnders Carlsson struct I { 447e0b207eSAnders Carlsson template<typename T> void *operator new(size_t); // expected-error {{'operator new' template must have at least two parameters}} 457e0b207eSAnders Carlsson }; 46