| // PR c++/93901 |
| // { dg-do compile { target c++11 } } |
| |
| void *operator new (__SIZE_TYPE__, void *p) noexcept { return p; } |
| |
| extern void *mem; |
| |
| constexpr bool YES = true; |
| |
| struct NoexceptTrueCtor { |
| NoexceptTrueCtor() noexcept(true); |
| }; |
| void NoexceptTrueFun() noexcept(true); |
| |
| struct NoexceptYesCtor { |
| NoexceptYesCtor() noexcept(YES); |
| }; |
| void NoexceptYesFun() noexcept(YES); |
| |
| struct NoexceptOneEqOneCtor { |
| NoexceptOneEqOneCtor() noexcept(1 == 1); |
| }; |
| void NoexceptOneEqOneFun() noexcept(1 == 1); |
| |
| struct NoNoexceptCtor { |
| NoNoexceptCtor(); |
| }; |
| void NoNoexceptFun(); |
| |
| static_assert(noexcept(new(mem) NoexceptTrueCtor), "2"); // OK |
| static_assert(noexcept(NoexceptTrueFun()), "3"); // OK |
| |
| static_assert(noexcept(new(mem) NoexceptYesCtor), "5"); // fail |
| static_assert(noexcept(NoexceptYesFun()), "6"); // OK |
| |
| static_assert(noexcept(new(mem) NoexceptOneEqOneCtor), "8"); // fail |
| static_assert(noexcept(NoexceptOneEqOneFun()), "9"); // OK |
| |
| static_assert(!noexcept(new(mem) NoNoexceptCtor), "11"); // OK |
| static_assert(!noexcept(NoNoexceptFun()), "12"); // OK |