blob: 2560364fe55df5b280ec485e7d84ee13539b53e5 [file] [log] [blame]
// C++26 P3068R5 - Allowing exception throwing in constant-evaluation
// { dg-do compile { target c++26 } }
// { dg-require-effective-target exceptions_enabled }
#include <exception>
constexpr std::exception_ptr
foo ()
{
try
{
throw 42;
}
catch (...)
{
return std::current_exception ();
}
}
constexpr bool
bar ()
{
try
{
std::rethrow_exception (foo ());
}
catch (const int &a)
{
return a == 42;
}
return false;
}
static_assert (bar ());
constexpr std::exception_ptr a = foo (); // { dg-error "is not a constant expression because it refers to exception object allocated with '__cxa_allocate_exception'" }
constexpr std::exception_ptr b = std::make_exception_ptr (42ULL); // { dg-error "is not a constant expression because it refers to exception object allocated with '__cxa_allocate_exception'" }