Entendendo a SFINAE
Tanto quanto eu sei, SFINAE significa falhas de substituição não resultam em erros de compilação, mas apenas remover o protótipo da lista de possíveis sobrecargas.
O que eu não entendo: por que isso é SFINAE:
template <bool C, typename T = void> struct enable_if{};
template <typename T> struct enable_if<true, T> { typedef T type; };
Mas isso não é?
template <bool C> struct assert;
template <> struct assert<true>{};
Pelo que entendi, a lógica subjacente é idêntica aqui. Esta questão emergiu dos comentários paraesta resposta.