Vit*_*meo 8 c++ templates language-lawyer template-argument-deduction c++17
在"类模板参数推导"的提案(P0091R2)包含以下例子:
template<class ... Ts> struct X { X(Ts...) };
X x1{1}; // OK X<int>
X x11; // OK X<>
Run Code Online (Sandbox Code Playgroud)
(除了构造函数定义缺少一个主体的事实)之外,该示例似乎建议使用空参数包推导出使用零参数构造的可变参数类模板.
不幸的是,最新版本的g ++不同意:
int main()
{
X x1{1};
X x11;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我无法在提案中找到明确的措辞来澄清这种互动.这里的g ++错了吗?
在P0620R0在C++ 17出版之前删除了所引用的限制之后,现在这已经很好了.
以前的答案一直供参考:
N4618 [dcl.type.class.deduct]/1:
如果推断类类型的占位符在简单声明的decl-specifier-seq中显示为 decl-specifier,则该声明的init- declarator应为
declarator-id attribute-specifier-seq opt initializer
初始化程序不是可选的.