Как работает std :: enable_if?

Я только что задал этот вопрос:std :: numeric_limits как условие

Я понимаю использование гдеstd::enable_if определит тип возвращаемого значения метода, условно вызывая сбой при компиляции метода.

template<typename T>
typename std::enable_if<std::numeric_limits<T>::is_integer, void>::type foo(const T &bar) { isInt(bar); }

Что я не понимаю, так это второй аргумент и, казалось бы, бессмысленное назначениеstd::enable_if когда он объявлен как часть оператора шаблона, как вRapptz ответ.

template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0>
void foo(const T& bar) { isInt(); }

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

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