Специализация шаблона и проблемы enable_if [дубликаты]

На этот вопрос уже есть ответ здесь:

SFINAE работает в типе возврата, но не в качестве параметра шаблона 3 ответа

Я сталкиваюсь с проблемой, касающейся правильного использования enable_if и специализации шаблона.

После изменения примера (по соображениям конфиденциальности), вот сопоставимый пример:

У меня есть функция под названием "меньше", которая проверяет, является ли 1-й аргумент меньше, чем 2-й аргумент. Допустим, я хочу иметь 2 разных типа реализаций в зависимости от типа ввода - 1 реализация для целого числа и другая для двойного.

Код, который у меня есть, выглядит примерно так:

#include <type_traits>
#include <iostream>

template <class T,
          class = typename std::enable_if<std::is_floating_point<T>::value>::type>
     bool less(T a, T b) {
  // ....
}

template <class T,
          class = typename std::enable_if<std::is_integral<T>::value>::type>
     bool less(T a, T b) {
  // ....
}

int main() {
    float a;
    float b;
    less(a,b);
    return 0;
}

Приведенный выше код не компилируется, потому что - он говорит, что я переопределяю метод less.

Ошибки:

Z.cpp:15:19: error: template parameter redefines default argument
          class = typename std::enable_if<std::is_integral<T>::value>::type>

                  ^
Z.cpp:9:19: note: previous default template argument defined here
          class = typename std::enable_if<std::is_floating_point<T>::value>::type>
                  ^

Z.cpp:16:11: error: redefinition of 'less'
     bool less(T a, T b) {
          ^

Z.cpp:10:11: note: previous definition is here
     bool less(T a, T b) {
          ^

Z.cpp:23:5: error: no matching function for call to 'less'
    less(a,b);
    ^~~~

Z.cpp:15:43: note: candidate template ignored: disabled by 'enable_if'
      [with T = float]
          class = typename std::enable_if<std::is_integral<T>::value>::type>
                                          ^
3 errors generated.

Может кто-то указать, в чем здесь ошибка?

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

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