C ++ 11
14.8.2 - 模板参数扣除 -
[temp.deduct]
7 替换发生在函数类型和模板参数声明中使用的所有类型和表达式中。表达式不仅包括常量表达式,例如出现在数组边界中的常量表达式,还包括非类型模板参数,还包括
sizeof
,decltype
内的一般表达式(即非常量表达式)以及允许的其他上下文非常数表达式。
的 C ++ 14
14.8.2 - 模板参数扣除 -
[temp.deduct]
7 替换发生在函数类型和模板参数声明中使用的所有类型和表达式中。表达式不仅包括常量表达式,例如出现在数组边界中的常量表达式,还包括非类型模板参数,还包括
sizeof
,decltype
内的一般表达式(即非常量表达式)以及允许的其他上下文非常数表达式。 替换以词汇顺序进行,并在遇到导致演绎失败的条件时停止。
添加的句子明确说明了在C ++ 14中处理模板参数时的替换顺序。
替代顺序通常不会得到很多关注。我还没有找到一篇关于其重要性的论文。也许这是因为C ++ 1y还没有完全标准化,但我认为这样的改变必定是出于某种原因而引入的。
问题:
答案 0 :(得分:59)