Есть ли недостатки в следующем синтаксисе Предлагаемый!?
template< typename T >
void f() static_assert(std::is_same< T, int >::value)
{ ; }
вместо SFINAE (это выглядит как костыль):
template< typename T, typename = typename std::enable_if< std::is_same< T, int >::value >::type >
void f() { ; }
или даже хуже:
template< typename T >
typename std::enable_if< std::is_same< T, int >::value >::type
f()
{ ; }
который запрещает использование вывода auto
типа результата.