например тут:
template<int i> constinit int I = i;
enum class E{FOO, BAR};
consteval int& operator++(E e, int){
return I<static_cast<int>(e)>; // error: 'e' is not a constant expression
}
Если я правильно помню, consteval обязан быть вычислен во время компиляции, constexpr на усмотрение компилятора, может вы числится, а может и нет, тогда в рантайме.
ну да, но какие-такие неконстантные выражения могут быть в аргументах функции чисто времени компиляции
А вы пробовали заменить static_cast на вызов consteval-функции? У меня ощущение, что в этом проблема, а не в самом e
да, пробовал и так: struct A{int i;}; consteval int& operator++(A a, int){ return I<a.i>;} но та же ошибка'a' is not a constant expression
Обсуждают сегодня