47 lines
1.0 KiB
C++
47 lines
1.0 KiB
C++
|
// RUN: %clang_cc1 -fsyntax-only -verify -fexceptions %s
|
||
|
typedef __SIZE_TYPE__ size_t;
|
||
|
|
||
|
// Operator delete template for placement new with global lookup
|
||
|
template<int I>
|
||
|
struct X0 {
|
||
|
X0();
|
||
|
|
||
|
static void* operator new(size_t) {
|
||
|
return I; // expected-error{{cannot initialize}}
|
||
|
}
|
||
|
|
||
|
static void operator delete(void*) {
|
||
|
int *ip = I; // expected-error{{cannot initialize}}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
void test_X0() {
|
||
|
// Using the global operator new suppresses the search for a
|
||
|
// operator delete in the class.
|
||
|
::new X0<2>;
|
||
|
|
||
|
new X0<3>; // expected-note 2{{instantiation}}
|
||
|
}
|
||
|
|
||
|
// Operator delete template for placement new[] with global lookup
|
||
|
template<int I>
|
||
|
struct X1 {
|
||
|
X1();
|
||
|
|
||
|
static void* operator new[](size_t) {
|
||
|
return I; // expected-error{{cannot initialize}}
|
||
|
}
|
||
|
|
||
|
static void operator delete[](void*) {
|
||
|
int *ip = I; // expected-error{{cannot initialize}}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
void test_X1() {
|
||
|
// Using the global operator new suppresses the search for a
|
||
|
// operator delete in the class.
|
||
|
::new X1<2> [17];
|
||
|
|
||
|
new X1<3> [17]; // expected-note 2{{instantiation}}
|
||
|
}
|