, Удаление теста будет выполнено оптимизатором, который концептуально запускается после того, как компилятор выяснил, что в первую очередь означает код.
template <bool flag>
class foo
{
public:
int bar()
{
if(flag)
{
// stuff
}
}
};
компилятор компилирует этот класс, он заменяет параметр флага на true или false. Тогда имеем if (true) (или if (false)). Затем предложение if проверяет постоянное выражение и будет удалено во время компиляции. Можно ли ожидать, что компиляторы будут вести себя так?