我知道模板函数在链接时不会受到多重定义的影响,就像在类中定义的成员函数一样,默认情况下是内联的。此外,constexpr
对象具有内部链接,但模板变量具有外部链接(我的意思是在命名空间范围和 C++14 两种情况下)。
怎么样?
template<class T>
constexpr T i_am_odr_safe{};
i_am_odr_safe
在 C++14 中有外部链接还是内部链接?对于像函数模板这样的多重定义是否安全?
换句话说,i_am_odr_safe
是 odr 安全的吗?
最佳答案
这是 core issue 1713 ,IIRC的方向是这个变量模板会有外部链接。
不,这还没有解决,这就是为什么 LWG 在采用 P0604R0 的 A+B2 时决定将 inline
覆盖在标准库中的所有变量模板中。 .
关于c++ - 关于 ODR 违规和模板变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46335920/