Soweit ich weiß, bedeutet SFINAE Substitution Ausfälle führen nicht zu Kompilierungsfehlern, sondern nur den Prototyp aus der Liste der möglichen Überlastungen entfernen.Verständnis SFINAE
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 wahr?
template <bool C> struct assert;
template <> struct assert<true>{};
Aus meinem Verständnis ist die zugrunde liegende Logik hier identisch. Diese Frage ergab sich aus den Kommentaren zu this answer.
Kein Code ist SFINAE. – jrok
Sie scheinen Ihre eigene Frage zu beantworten: SFINAE _nicht_ einen Fehler bei der Kompilierung verursacht (wenn Substitution fehlschlägt), während der ganze Zweck einer statischen Behauptung _is_ einen Fehler bei der Kompilierung verursachen (ist eine Bedingung nicht wahr ist) –
@ jrok Wikipedia sagt 'enable_if' ist SFINAE, ist es falsch? – nijansen