Код: Выделить всё
#include
consteval int
plusone(int n)
{
return n+1;
}
constexpr int
maybeplusone(int n)
{
if (std::is_constant_evaluated()) {
n = plusone(n);
}
return n;
}
int
not_consteval()
{
return maybeplusone(1);
}
[*]Почему код недействителен?
[*]Должен ли if consteval отличаться от if (std::is_constant_evaluted()), и если да, то правильно ли clang++ принимать код с if consteval?
[*]Есть ли лучший способ определить функцию типа plusone, которая не должна случайно вызываться во время выполнения, но не вызывая таких ошибок? Что-то вроде static_assert(std::is_runtime_evaluated()) — за исключением того, что это, по-видимому, бесполезно, поскольку статическое утверждение всегда будет оцениваться во время компиляции.
< /ol>
Как бы то ни было, в моем более сложном приложении у меня есть разные распределители памяти для времени компиляции и времени выполнения, поэтому я хочу сделать что-то вроде этого
Код: Выделить всё
if consteval {
p = my_consteval_allocator(n);
}
else {
p = my_real_allocator(n);
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... onstexpr-c