Z tego co wiem, SFINAE oznacza, że awarie substytucji nie powodują błędów kompilacji, a jedynie usunięcie prototypu z listy możliwych przeciążeń.Zrozumieć SFINAE
Co ja nie rozumiem: dlaczego jest to SFINAE:
template <bool C, typename T = void> struct enable_if{};
template <typename T> struct enable_if<true, T> { typedef T type; };
Ale to nie jest?
template <bool C> struct assert;
template <> struct assert<true>{};
Z tego co wiem, logika leżąca u podstaw jest tutaj identyczna. To pytanie pojawiło się w komentarzach do this answer.
Żaden z tych kodów nie jest SFINAE. – jrok
Wygląda na to, że odpowiadasz na własne pytanie: SFINAE robi _nie_ powoduje błąd podczas kompilacji (jeśli podstawianie się nie powiedzie), podczas gdy cały cel asercji statycznej _jest_ powoduje błąd kompilacji (jeśli jakiś warunek nie jest prawdziwy) –
@ Wikipedia mówi, że 'enable_if' to SFINAE, czy to źle? – nijansen