1// RUN: %clang_cc1 -fsyntax-only -verify -fexceptions %s
2typedef __SIZE_TYPE__ size_t;
3
4// Operator delete template for placement new with global lookup
5template<int I>
6struct X0 {
7  X0();
8
9  static void* operator new(size_t) {
10    return I; // expected-error{{cannot initialize}}
11  }
12
13  static void operator delete(void*) {
14    int *ip = I; // expected-error{{cannot initialize}}
15  }
16};
17
18void test_X0() {
19  // Using the global operator new suppresses the search for a
20  // operator delete in the class.
21  ::new X0<2>;
22
23  new X0<3>; // expected-note 2{{instantiation}}
24}
25
26// Operator delete template for placement new[] with global lookup
27template<int I>
28struct X1 {
29  X1();
30
31  static void* operator new[](size_t) {
32    return I; // expected-error{{cannot initialize}}
33  }
34
35  static void operator delete[](void*) {
36    int *ip = I; // expected-error{{cannot initialize}}
37  }
38};
39
40void test_X1() {
41  // Using the global operator new suppresses the search for a
42  // operator delete in the class.
43  ::new X1<2> [17];
44
45  new X1<3> [17]; // expected-note 2{{instantiation}}
46}
47