关于模板参数演绎看似有缺陷的段落?

时间:2018-01-23 12:05:05

标签: c++ language-lawyer c++17

省略模板参数是可能的,因为标准在17.9.1第3段[temp.arg.explicit](N4700)中说:

  

可以从默认 template-argument 推断或获得的尾随模板参数可以从显式 template-argument 的列表中省略...

另一方面,标准有一个相互矛盾的规则,如17.9.2,第2段[temp.deduct]显示(强调我的):

  

...具体而言,在针对给定函数模板评估显式指定的模板参数列表时,执行以下步骤:

     
      
  • 如果指定的模板参数与实际的模板参数(即类型,非类型,模板)不匹配,或者参数多于参数且没有参数是模板参数包,或者如果每个非包装参数没有参数,类型扣除失败。
  •   
  • ...
  •   

本段建议如果我们使用显式模板参数列表,则应指定所有模板参数,这与上一段明显矛盾。那么,意图是什么?

1 个答案:

答案 0 :(得分:5)

第二个引用在评估明确指定的模板参数列表" 时应用"但第一个显然是关于未明确指定某些模板参数的情况。没有冲突,因为他们正在谈论两种不同的情况。