多个翻译单元中的功能模板实例化的身份

时间:2015-10-01 03:38:29

标签: c++ templates inline language-lawyer one-definition-rule

根据cppref,多个翻译单元中inline个函数的身份特征如下:

  

...

     

2)每个翻译单元都有相同的地址。

     

3)所有函数定义中的函数本地静态对象都是   在所有翻译单元中共享(它们都指向同一个对象   在一个翻译单元中定义)

     

...

简单地说,暗示了单身人士的身份。

我想知道同样适用于功能模板实例没有 inline说明符。

1 个答案:

答案 0 :(得分:1)

  

我想知道在没有内联说明符的情况下是否同样适用于函数模板实例化。

这同样适用于模板。参见§3.2一个定义规则:

  
      
  1. 类类型(第9条),枚举类型(7.2),带内部链接的内联函数(7.1.2),类模板(第14条),非静态函数可以有多个定义template(14.5.6),类模板的静态数据成员(14.5.1.3),类模板的成员函数(14.5.1.1),或未指定某些模板参数的模板特化(14.7, 14.5.5)在一个程序中,每个定义出现在不同的翻译单元中,并且定义满足以下要求。 ... 如果D是模板并且是在多个翻译单元中定义的,则前面的要求应同时适用于模板定义中使用的模板封闭范围(14.6.3)中的名称,也适用于依赖实例化时的名称(14.6.2)。如果D的定义满足所有这些要求,则程序应该表现得就像D的单一定义一样。如果D的定义不满足这些要求,那么行为是不确定的。
  2.