为什么模板参数替换的顺序很重要?

时间:2014-03-13 02:38:22

标签: c++ templates c++11 language-lawyer c++14

C ++ 11

  

14.8.2 - 模板参数扣除 - [temp.deduct]

     
    

7 替换发生在函数类型和模板参数声明中使用的所有类型和表达式中。表达式不仅包括常量表达式,例如出现在数组边界中的常量表达式,还包括非类型模板参数,还包括sizeofdecltype内的一般表达式(即非常量表达式)以及允许的其他上下文非常数表达式。

  

C ++ 14

  

14.8.2 - 模板参数扣除 - [temp.deduct]

     
    

7 替换发生在函数类型和模板参数声明中使用的所有类型和表达式中。表达式不仅包括常量表达式,例如出现在数组边界中的常量表达式,还包括非类型模板参数,还包括sizeofdecltype内的一般表达式(即非常量表达式)以及允许的其他上下文非常数表达式。 替换以词汇顺序进行,并在遇到导致演绎失败的条件时停止。   



添加的句子明确说明了在C ++ 14中处理模板参数时的替换顺序。

替代顺序通常不会得到很多关注。我还没有找到一篇关于其重要性的论文。也许这是因为C ++ 1y还没有完全标准化,但我认为这样的改变必定是出于某种原因而引入的。

问题:

  • 为什么以及何时,模板参数替换的顺序是否重要?

1 个答案:

答案 0 :(得分:59)