В функции constexpr
я не могу определить нелитеральную переменную в ветви оператора if
, обусловленного выражением std::is_constant_evaluated()
? В C ++ 20? Clang и G CC указывают, что это запрещено, но в приведенном ниже примере разрешены другие конструкции, которые не могут быть оценены во время компиляции. Есть ли конкретное c ограничение на использование нелитералов?
#include <type_traits>
struct Foo {
~Foo() {}
};
void non_constexpr() {}
constexpr bool bar()
{
if (std::is_constant_evaluated()) {
} else {
non_constexpr();
double d;
reinterpret_cast<int*>(&d);
Foo f; // error: variable ‘f’ of non-literal type ‘Foo’ in ‘constexpr’ function
}
return true;
}
constexpr bool x = bar();