SFINAE verstehen

Nach meinem Kenntnisstand bedeutet SFINAE, dass Substitutionsfehler nicht zu Kompilierungsfehlern führen, sondern lediglich den Prototyp aus der Liste der möglichen Überlastungen entfernen.

Was ich nicht verstehe: warum ist das SFINAE:

template <bool C, typename T = void> struct enable_if{};
template <typename T> struct enable_if<true, T> { typedef T type; };

Aber das ist nicht?

template <bool C> struct assert;
template <> struct assert<true>{};

Nach meinem Verständnis ist die zugrunde liegende Logik hier identisch. Diese Frage ergab sich aus den Kommentaren zudiese Antwort.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage