【发布时间】:2016-09-20 17:57:51
【问题描述】:
为什么编译器可以用这段代码推导出 T:
#include <vector>
template<typename T>
void foo(T& t) {}
int main(void) {
std::vector<uint8_t> vec = { 1,2,3 };
foo(vec);
return 0;
}
但此代码失败:
#include <vector>
#include <type_traits>
template<typename T>
void foo(typename std::enable_if<true, T>::type& t) {}
int main(void) {
std::vector<uint8_t> vec = { 1,2,3 };
foo(vec);
return 0;
}
我想使用第二个构造,根据传递的类方法的存在在两个模板函数之间进行选择。
【问题讨论】:
-
可能有一个专业化
std::enable_if<true, MyType>,其中包含一个using type = std::vector<uint8_t>。编译器如何知道它何时只有参数类型?
标签: c++ templates sfinae typetraits