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);
}
};
Run Code Online (Sandbox Code Playgroud)
在"C++模板,完整指南"第2版中,有前面的示例关于带有注入类名的隐式演绎指南的字幕.作者提到,对于注入的类名禁用了类参数推导,因为f的返回类型将X<Iter>归因于隐式推导指南.但我相信模板构造函数的隐式演绎指南更像是下面的那个.
template <typename T, typename Iter>
X(Iter a, Iter b) -> X<T>;
Run Code Online (Sandbox Code Playgroud)
我的问题是如何将类模板参数类型,即使在这种情况下,可以推断T,并Iter有两种不同类型和参数类型的唯一依靠Iter.即使T可以某种方式推断出来,T并且Iter是独立的,所以Iter从论证中推断出来并不意味着它的X类型是X<Iter>正确的吗?这是书中的文字有些错误,还是演绎指南看起来与我的想法不同?