省略模板参数是可能的,因为标准在17.9.1第3段[temp.arg.explicit](N4700)中说:
可以从默认 template-argument 推断或获得的尾随模板参数可以从显式 template-argument 的列表中省略...
另一方面,标准有一个相互矛盾的规则,如17.9.2,第2段[temp.deduct]显示(强调我的):
...具体而言,在针对给定函数模板评估显式指定的模板参数列表时,执行以下步骤:
- 如果指定的模板参数与实际的模板参数(即类型,非类型,模板)不匹配,或者参数多于参数且没有参数是模板参数包,或者如果每个非包装参数没有参数,类型扣除失败。
- ...
本段建议如果我们使用显式模板参数列表,则应指定所有模板参数,这与上一段明显矛盾。那么,意图是什么?
答案 0 :(得分:5)
第二个引用在评估明确指定的模板参数列表" 时应用"但第一个显然是关于未明确指定某些模板参数的情况。没有冲突,因为他们正在谈论两种不同的情况。