【问题标题】:About ODR-violations and template variables关于 ODR 违规和模板变量
【发布时间】:2017-09-21 05:13:16
【问题描述】:

我知道模板函数在链接时不会受到多个定义的影响,例如在类中定义的成员函数,默认情况下是内联的。此外,constexpr 对象具有内部链接,但模板变量具有外部链接(我的意思是在命名空间范围内,在这两种情况下都适用于 C++14)。

怎么样?

template<class T>
constexpr T i_am_odr_safe{};

i_am_odr_safe 在 C++14 中是否有外部或内部链接?对于像函数模板这样的多重定义是否安全?

换句话说,i_am_odr_safe odr 安全吗?

【问题讨论】:

    标签: c++ templates c++14 constexpr one-definition-rule


    【解决方案1】:

    这是core issue 1713,IIRC的方向是这个变量模板会有外部链接。

    不,这还没有解决,这就是为什么 LWG 在采用 P0604R0 的 A+B2 时决定将 inline 覆盖在标准库中的变量模板上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      相关资源
      最近更新 更多