Почему нельзя использовать goto в constexpr функциях?

Почему нельзя использовать goto в constexpr функциях?

constexpr auto foo() {
    hell: goto hell; // error: 'goto' in 'constexpr' function
}

Ответы (1 шт):

Автор решения: tocic

От слишком строгих правил для constexpr функций постепенно избавляются. В С++23 с принятием P2242 можно будет использовать метки и goto в constexpr функциях, но не в контексте constant expression.

Пример:

#include <cassert>

constexpr auto foo() {
    if consteval {
        // can't use 'goto'
        return 42;
    } else {
        goto test;
        test: return 43;
    }
}

int main() {
    static_assert(foo() == 42);
    assert(foo() == 43);
}
→ Ссылка