Предположим, у нас есть некоторая функция-член SFINAE:
class foo{
template <class S, class = std::enable_if_t<std::is_integral<S>::value, S>
void bar(S&& s);
template <class S, class = std::enable_if_t<!std::is_integral<S>::value, S>
void bar(S&& s);
}
Если мы объявили это, как указано выше, то как мы можем их определить? Обе сигнатуры их функций выглядят так:
template <class S, class>
inline void foo::bar(S&& s){ ... do something ... }
Я видел примеры, когда каждый возвращает std::enable_if_t<...>
вроде:
template <class S, class>
auto bar(S&& s) -> std::enable_if_t<!std::is_integral<S>::value, S>(...){
... do something ...
}
Для устранения неоднозначности на основе типа возвращаемого значения. Но я не хочу ничего возвращать.