关于ODR违规和模板变量

时间:2017-09-21 05:13:16

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

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

怎么样?

template<class T>
constexpr T i_am_odr_safe{};

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

换句话说,i_am_odr_safe是否安全?

1 个答案:

答案 0 :(得分:7)

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

不,这还没有得到解决,这就是为什么当LWG采用P0604R0的A + B2时,LWG决定在标准库中的所有可变模板上添加inline