Завелся у нас в проекте один большой любитель SFINAE, пытался закоммитить буквально нечто подобное в репозиторий:
template < typename T, typename std::enable_if< std::is_same< T, SomeType >::value, int >::type = 0 >
int function(const T& arg)
{
...
}
template < typename T, typename std::enable_if< std::is_same< T, int >::value, int >::type = 0 >
int function(const T& arg)
{
...
}
Вот какой такой смысл делать это? Чем это лучше можно сказать канонического:
template <typename T>
int function(const T& arg) = delete;
template <>
int function<SomeType>(const SomeType& arg)
{
...
}
template <>
int function<int>(const int& arg)
{
...
}
Есть у кого мысли, чем первый вариант реально лучше? Я понимаю, SFINAE в данном случае удобно было бы использовать, если хочется одну реализацию шаблона сделать доступной для списка типов, которые все можно по очереди if_same-нуть. Но для одного единственного типа - это ведь по сути повторяется руками работа компилятора, не?