Рассмотрим следующий код:
void f(float x)
{
x * (true ? 1.f : 0.0);
}
Тип declval(bool) ? declval(float) : declval(double)
равен double
в соответствии со стандартом С++ [expr.cond].
Означает ли это, что приведенный выше код должен быть эквивалентен:
void f(float x)
{
double(x) * 1.0;
}
Или существует инструкция, которая позволяет оптимизировать, если первый операнд ?:
является выражением постоянной времени компиляции?