Per quanto ne so, SFINAE significa che i guasti di sostituzione non provocano errori di compilazione, ma rimuovono il prototipo dall'elenco di possibili sovraccarichi.Informazioni su SFINAE
Quello che non capisco: perché è questo SFINAE:
template <bool C, typename T = void> struct enable_if{};
template <typename T> struct enable_if<true, T> { typedef T type; };
Ma questo non è?
template <bool C> struct assert;
template <> struct assert<true>{};
Dalla mia comprensione, la logica sottostante è identica qui. Questa domanda è emersa dai commenti a this answer.
Né il codice è SFINAE. – jrok
Sembra che tu risponda alla tua stessa domanda: SFINAE non causa un errore in fase di compilazione (se la sostituzione fallisce), mentre l'intero scopo di un'asserzione statica _is_ causare un errore in fase di compilazione (alcune condizioni non sono vere) –
@ jrok Wikipedia dice 'enable_if' è SFINAE, è sbagliato? – nijansen