此代码在 VS2013 中编译失败。
template<typename T>
class SomeClass {
public:
std::enable_if_t<std::is_fundamental<T>::value, T>
DoSomething() {
return T();
}
std::enable_if_t<!std::is_fundamental<T>::value, T>
DoSomething() {
return T();
}
};
如何在VS2013中实现(DoSomething必须是非静态成员函数)?
最佳答案
SFINAE 仅适用于模板。您的 DoSomething()
不是模板,它是类模板的非模板成员。您需要将其设为模板:
template<typename T>
class SomeClass {
public:
template <class U = T>
std::enable_if_t<std::is_fundamental<U>::value, T>
DoSomething() {
return T();
}
template <class U = T>
std::enable_if_t<!std::is_fundamental<U>::value, T>
DoSomething() {
return T();
}
};
关于c++ - 成员函数 SFINAE 错误 C2938,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28043532/