Почему я не могу объявить этот Bool ContexPR, хотя он четко оценивается во время компиляции?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему я не могу объявить этот Bool ContexPR, хотя он четко оценивается во время компиляции?

Сообщение Anonymous »

Я понятия не имею, как компилятор решает, что может быть постоянным, а что не может. Понятно, что выражение, назначаемое для Bool, является ContexPR, потому что, похоже, у него нет проблем с возвращением IDX - 1, поэтому компилятор знает, что это постоянное выражение. Я не понимаю: < /p>

Код: Выделить всё

#include 
#include 
#include 
#include 

template 
consteval auto index_of_type() -> uint64_t
{
uint64_t idx = 0;

// CANNOT BE CONSTEXPR EVEN THOUGH IT IS CONSTEXPR
// REMOVING constexpr MAKES IT COMPILE. AND THIS FUNCTION IS CONSTEVAL
constexpr bool bFound = ((++idx, std::is_same_v) || ...);

return idx - 1;
}

template 
consteval auto index_of_tyoe_in_tuple(const std::tuple&) -> uint64_t
{
return index_of_type();
}

int main(int argc, char* argv[])
{
constexpr std::tuple my_tuple;

constexpr int idx = index_of_tyoe_in_tuple(my_tuple);
}
Ссылка Godbolt.
Я не могу сделать static_assert (bfound) Если я не сделаю bfound contexpr. Таким образом, в нем говорится, что IDX> 20 не является constexPR, и все же возврат IDX - 1 на самом деле постоянно. Странно.

Подробнее здесь: https://stackoverflow.com/questions/796 ... -compile-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»