Я использую пару целочисленных параметров шаблона для указания отношения, так как я не могу использовать double в качестве параметра шаблона. Преобразование в double защищено от деления на ноль тройным. Это работало в более ранней версии компилятора, но Visual Studio 2013 дает ошибку:
error C2124: divide or mod by zero
Здесь приведена упрощенная версия кода:
template<int B1, int B2>
class MyClass
{
const double B = (B2 == 0) ? 0.0 : (double) B1 / (double) B2;
// ...
};
MyClass<0, 0> myobj;
Я действительно хочу, чтобы B
был оптимизирован из выражений, которые используют его, когда он равен нулю, поэтому мне нужно однострочное определение. Я знаю, что могу просто использовать параметры шаблона <0, 1>
, чтобы обойти его, но мне интересно, есть ли способ убедить компилятор в том, что мое выражение безопасно?