«если» с параметрами шаблона или SFINAE является предпочтительным?

Предпочтительнее это:

template
bool isNotZero(const T &a)
{
    if (std::is_floating_point::value) return abs(a) > std::numeric_limits::epsilon();
    else return a;
}

Или это:?

template
std::enable_if::type
isNotZero(const T &a) { return abs(a) > std::numeric_limits::epsilon(); }

template
std::enable_if::type
isNotZero(const T &a) { return a; }

Я обычно использую первый тип, чтобы избежать многих версий функций.

Я считаю, что это точно так же.

Первая версия оптимизирована на этапе кода операции, а вторая - на этапе создания шаблона.

Ответы на вопрос(2)

Ваш ответ на вопрос