SFINAE : Substitution Failure Is Not An Error (替换失败不是错误)。
知乎 - C++模板进阶指南:SFINAE 推荐阅读。
SFINAE最主要的作用,是保证编译器在泛型函数、偏特化、及一般重载函数中遴选函数原型的候选列表时不被打断。除此之外,它还有一个很重要的元编程作用就是实现部分的编译期自省和反射。
在函数模板的重载决议中应用此规则:当将模板形参替换为显式指定的类型或推导的类型失败时,从重载集中丢弃这个特化,而非导致编译失败。此特性被用于模板元编程。