clang (trunk) выдает ошибку для следующего кода:
consteval void f() {}
int main()
{
f(); // error: call to consteval function 'f' is not a constant expression
// note: subobject of type 'void' is not initialized
}
в то время как gcc (trunk) компилирует это без ошибок.
Я считаю, что это, вероятно, ошибка clang, поскольку и gcc, и clang принимают этот код:
consteval int g() { return 42; }
int main()
{
g(); // ok
}
Вот код, с которым можно поиграть.
Так это ошибка clang, или код плохо сформирован, или есть ub, или что-то еще?
Изменить: я считаю, что было бы уместно указать, что clang позволяет вызывать f
из других функций, если они также являются consteval. Он выдает ошибку только тогда, когда f
вызывается из неконстевальных функций:
consteval int h()
{
f(); // ok
return 42;
}
constexpr int x = (f(), 5);
) - person Dani   schedule 11.08.2020consteval
. - person Barry   schedule 11.08.2020std::sort
. - person Dani   schedule 11.08.2020constexpr
sort
еще поддерживается. Но какое здесь отношение? - person cigien   schedule 11.08.2020sort
имеет кconsteval
? Это неconsteval
функция. - person Barry   schedule 11.08.2020static_assert
s. - person cigien   schedule 11.08.2020