我有这个简单的案例:
#include <iostream>
#include <type_traits>
template<typename T>
struct Handle_ {
T vlue;
};
template<typename T>
using Handle = Handle_<std::enable_if_t<true, T>>;
template<typename T>
void fooo(Handle<T> h, int a) {
}
int main() {
Handle<int> a;
fooo(a, 4);
}
无法编译,因为 fooo
的模板参数推导失败。
如果从 Handle
使用 std::enable_if_t
被删除 - 它有效。
template<typename T>
using Handle = Handle_<T>;
在这个 using 中创建一些依赖性使其不可推导的原因是什么?
最佳答案
这是因为 std::enable_if_t
是
template< bool B, class T = void >
using enable_if_t = typename enable_if<B,T>::type;
因此T
在::
的左边,是一个non-deduced context .
另请注意,别名将被视为其别名模板。 An alias itself won't participate in deduction .
关于c++ - 为什么使用具有某些类型特征的模板类型会导致模板推导失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49576388/