【发布时间】:2018-12-16 22:04:32
【问题描述】:
我正在尝试使用带有此代码的 SFINAE 使用 std::enable_if 有条件地仅从两个成员函数模板中选择一个:
#include <iostream>
#include <type_traits>
template<typename T>
struct C {
template<typename Q = T, typename = typename std::enable_if<std::is_same<Q, int>::value>::type>
int foo() {
return 1;
}
template<typename Q = T, typename = typename std::enable_if<!std::is_same<Q, int>::value>::type>
int foo() {
return 0;
}
};
int main() {
std::cout << C<int>().foo() << std::endl; //error member function foo already defined
}
但由于某种原因,Visual C++ 不断给我一个编译器错误,foo 已经定义。尽管如此,很明显,根据类的模板参数,只有一个函数是格式良好的。所以 SFINAE 应该从考虑中删除第二个。
知道为什么这不起作用吗?
【问题讨论】:
标签: c++ c++11 templates visual-c++ sfinae