p1.cpp 1.5 KB

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