【发布时间】:2018-12-11 10:24:34
【问题描述】:
template <typename T>
struct X
{
template <typename Iter>
X(Iter a, Iter b) {}
template <typename Iter>
auto f(Iter a, Iter b)
{
return X(a, b);
}
};
在“C++模板,完整指南”第二版中,有前面的例子,关于隐式演绎指南的字幕注入类名。作者提到对于注入的类名禁用类参数推导,因为由于隐式推导指南, f 的返回类型将为X<Iter>。但我相信模板构造函数的隐式推导指南会像下面的那样。
template <typename T, typename Iter>
X(Iter a, Iter b) -> X<T>;
我的问题是如何在这种情况下推导出类模板参数类型 T 和 Iter 是两种不同的类型,参数类型仅依赖于 Iter。此外,即使 T 可以以某种方式推断出来,T 和 Iter 是独立的,因此从参数中推断出 Iter 不应该意味着 X 具有类型 X<Iter> 对吗?这是书上的文字有什么错误,还是推理指南看起来和我想的不一样?
【问题讨论】:
标签: c++ c++17 type-deduction