SFINAE没有使用一个非常简单的例子

时间:2018-05-17 13:25:46

标签: c++ templates sfinae

template<typename T, typename = std::enable_if_t<std::is_trivially_copyable<T>::value>>
inline
int test_sfinae(T tc) {
    return 1;
}

template<typename T, typename = std::enable_if_t<!std::is_trivially_copyable<T>::value>>
inline
int test_sfinae(T ntc) {
    return 2;
}

有人可以向我解释为什么这段代码无法编译并提供此错误消息:

  

C2995&#39; int test_sfinae(T)&#39;:功能模板已经定义

我正在使用MVSC。

1 个答案:

答案 0 :(得分:8)

默认模板参数不参与重载解析,因此您的两个声明实际上是相同的。

您可以按以下方式重写声明:

T

template <typename T, int = 0> inline int test_sfinae(T tc); template <typename T, /* Something that does not compile... */ = 0> inline int test_sfinae(T ntc); 可以轻易复制时,声明将为:

T

因此将选择第一个重载,并且//getLabel.js import store from '../store'; const getLabel = (label) => { let labels = store.getState().labels; if (!labels) return label; //...do some calculations return result; }; 不可轻易复制时反向。

相关问题