С++ 1z представит "constexpr if" - если это будет иметь один из удаленных ветвей на основе условия. Кажется разумным и полезным.
Однако нельзя ли обойтись без ключевого слова constexpr? Я думаю, что во время компиляции компилятор должен знать, что условие зависания известно во время компиляции или нет. Если это так, даже самый базовый уровень оптимизации должен удалить ненужную ветвь.
Например (см. в godbolt: https://godbolt.org/g/IpY5y5):
int test() {
const bool condition = true;
if (condition) {
return 0;
} else {
// optimized out even without "constexpr if"
return 1;
}
}
Исследователь Godbolt показывает, что даже gcc-4.4.7 с -O0 не скомпилировал "return 1", поэтому он достиг того, что было обещано с помощью constexpr if. Очевидно, такой старый компилятор не сможет это сделать, когда условие является результатом функции constexpr, но факт остается фактом: современный компилятор знает, является ли условие constexpr или нет, и мне не нужно явно указывать его.
Итак, вопрос:
Почему "constexpr" требуется в "constexpr if"?