SFINEA in C++
SFINEA in C++ 作者:唐风 出处: http://www.cnblogs.com/liyiwen 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 SFINAE(substitution failure is not a error) 主要用于模板函数,它是指,编译器在使用具体类型来替换模板类型参数,对模板进行实例化(展开模板)时,如果发生替换失败,那么并不会直接引发编译错误(Error),而只是简单地把这个模板从重载候选者中去除掉。 还是看看代码吧(一个在SFINAE中常遇到的例子): 代码段1: template <typename T> bool is_class(int T::*) { return true; } template <typename T> bool is_class(...) { return false; } struct Test { }; int main(void) { std::cout<<is_class<Test>(0)<<endl; std::cout<<is_class<int>(0)<<endl; } 运行的结果是输出: 1 0 这表明,如果传给 is_class 的模板参数是一个类,那么返回 true 的那个版本就会被选中