blob: 63c1f710e9f130370f1da0e8b6f0a0405aff1ddb [file] [log] [blame] [edit]
// { dg-do compile { target c++20 } }
// PR libstdc++/114152
// Wrong exception specifiers for LFTSv3 scope guard destructors
#include <experimental/scope>
using namespace std::experimental;
struct F {
void operator()() noexcept(false);
};
static_assert( noexcept(std::declval<scope_exit<F>&>().~scope_exit()) );
static_assert( noexcept(std::declval<scope_fail<F>&>().~scope_fail()) );
static_assert( ! noexcept(std::declval<scope_success<F>&>().~scope_success()) );
struct G {
void operator()() noexcept(true);
};
static_assert( noexcept(std::declval<scope_exit<G>&>().~scope_exit()) );
static_assert( noexcept(std::declval<scope_fail<G>&>().~scope_fail()) );
static_assert( noexcept(std::declval<scope_success<G>&>().~scope_success()) );