自C++ 17以来可用的构造函数的模板参数推导是否允许显式指定一些类模板参数?

W.F*_*.F. 7 c++ templates language-lawyer c++17

除了对构造函数最明显的模板参数推导使用外,我可以想象一些更复杂的用例,我们只推导出模板类的部分参数,例如:

std::pair<int> p(1, 2); // std::pair<int, int>
Run Code Online (Sandbox Code Playgroud)

虽然这个结构是在函数中推导出模板参数的自然结果,但我找不到这种用法的任何例子.也许是因为具有可变参数模板参数的类的模糊性?

std::tuple<int> t(1, 2, 3); // std::tuple<int, int, int>
Run Code Online (Sandbox Code Playgroud)

然而,这种方式引入语法不会替代太好的"make_*"包装器(参见N3602),其中功能可供我们使用...

Nic*_*las 7

显然不是.P0091的介绍声称它确实如此,但实际的措辞却完全不同:

对应于类模板的模板名称,后跟带括号的表达式列表...

这排除了使用模板名称+一些参数和"括号表达式列表".在措辞的其他部分也有语法排除.

所以不,在推断其他论点时,不可能指定一些参数.

  • @WF:提案的错误*版本*.该网站有[所有论文,按年份分组](http://www.open-std.org/JTC1/SC22/WG21/docs/papers/). (2认同)
  • 实际上,它是不允许的 - 它从实际的措辞中删除,几乎是由于"`std :: tuple <int> t(1,2,3);`"问题.作者只是未能更新介绍部分. (2认同)