xref: /minix3/external/bsd/llvm/dist/clang/test/CXX/except/except.spec/p15.cpp (revision 0b98e8aad89f2bd4ba80b523d73cf29e9dd82ce1)
1 // RUN: %clang_cc1 -std=c++11 -fexceptions -fcxx-exceptions -fsyntax-only -verify %s
2 
3 // Deallocation functions are implicitly noexcept.
4 // Thus, explicit specs aren't allowed to conflict.
5 
6 void f() {
7   // Force implicit declaration of delete.
8   delete new int;
9   delete[] new int[1];
10 }
11 
12 void operator delete(void*);
13 void operator delete[](void*);
14 
15 static_assert(noexcept(operator delete(0)), "");
16 static_assert(noexcept(operator delete[](0)), "");
17 
18 // Same goes for explicit declarations.
19 void operator delete(void*, float);
20 void operator delete[](void*, float);
21 
22 static_assert(noexcept(operator delete(0, 0.f)), "");
23 static_assert(noexcept(operator delete[](0, 0.f)), "");
24 
25 // But explicit specs stay.
26 void operator delete(void*, double) throw(int); // expected-note {{previous}}
27 static_assert(!noexcept(operator delete(0, 0.)), "");
28 void operator delete(void*, double) noexcept; // expected-error {{does not match}}
29