替换失败并非错误 替换失败并非错误 Substitution failure is not an error SFINAE是指C语言在模板参数匹配失败时不认为这是一个编译错误戴维范德沃德英语David Vandevoorde最先引入SFINAE缩写描述相关编程技术 具体说当创建一个重载函数的候选集时某些或全部候选函数是用模板实参替换可能的推导模板形参的模板实例化结果如果某个模板的实参替换时失败编译器将在候选集中删除该模板而不是当作一个编译错误从而中断编译过程这需要C语言标准授予如此处理的许可 如果一个或多个候选保留下来那么函数重载的解析就是成功的函数调用也是良好的