"Constexpr if" frente a "if" con optimizaciones: ¿por qué se necesita "constexpr"?

C ++ 1z introducirá "constexpr if", un if que tendrá una de las ramas eliminadas, según la condición. Parece razonable y útil.

Sin embargo, ¿no es posible prescindir de la palabra clave constexpr? Creo que durante la compilación, el compilador debe saber si se conoce la condición durante el tiempo de compilación o no. Si es así, incluso el nivel de optimización más básico debería eliminar la rama innecesaria.

Por ejemplo (ver en 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 explorer muestra que incluso gcc-4.4.7 con -O0 no compiló "return 1", por lo que logró lo prometido con constexpr if. Obviamente, ese compilador antiguo no podrá hacerlo cuando la condición sea el resultado de la función constexpr, pero el hecho sigue siendo: el compilador moderno sabe si la condición es constexpr o no y no necesita que lo explique explícitamente.

Entonces la pregunta es:

¿Por qué se necesita "constexpr" en "constexpr if"?

Respuestas a la pregunta(1)

Su respuesta a la pregunta