的“模板参数推导类模板”建议(P0091R2)包含以下例子:“类模板的模板参数推导”是否应该推导可变类模板的空参数包?
template<class ... Ts> struct X { X(Ts...) };
X x1{1}; // OK X<int>
X x11; // OK X<>
(除了事实,即构造定义缺少体),示例似乎暗示用零参数构造的可变类模板将用空参数包推导出来。
不幸的是,克最新版本++不同意:
int main()
{
X x1{1};
X x11;
}
In function 'int main()':
error: invalid use of template-name 'X' without an argument list
X x11;
^
note: class template argument deduction requires an initializer
我找不到的建议,阐明明确的措辞这种互动。 g ++在这里错了吗?
'X x11 {};'的作品。 – ildjarn
我想说gcc实现现在处于实验阶段。即'vector v {2,3}'工作,但'vector v {2,3,4}'产生一个错误,'int'不是一个类,struct或union类型。 – krzaq
@krzaq:它似乎试图为该特定情况调用[构造函数(2)](http://en.cppreference.com/w/cpp/container/vector/vector)。我想知道这是否实际上是有意的*(即这些情况下的消歧规则是什么)*。顺便说一下,我知道gcc正处于实验阶段 - 我的兴趣是在适当的时候提交错误报告。 –