On Friday, May 3, 2024, Sebastian Wittmeier wrote:

Up till now, it is the decision of the compiler, whether to evaluate those expressions in compile-time or runtime.

This was chosen on purpose.

"must be a compile-time constant." would contradict this philosophy.



I wonder is it foreseeable in the future that the following would be valid code for a program that ends with EXIT_SUCCESS?

template<int i>
bool Func(void)
{
    return 666 == i;
}

constexpr bool Func2(int const a)
{
    if consteval
    {
        return Func<a>();
    }
    else
    {
        return false;
    }
}

constexpr int monkey = 665;

int main(void)
{
    return !Func2( monkey + 1 );
}