c++ - 关于 ODR 违规和模板变量

标签 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 是 odr 安全的吗?

最佳答案

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

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

关于c++ - 关于 ODR 违规和模板变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46335920/

相关文章:

C++11/14 调用解决方法

c++ - 有没有办法进行编译时检查,一个类的所有成员都在 operator== 中进行比较

c++ - 函数模板的模板参数名是否可以在函数参数列表中多次使用?

javascript - Vuejs未定义属性错误但已定义

WordPress:带有主题的打包插件

c++ - 对指针数组的引用

c++ - 在 lambda 中使用未捕获的变量

c++ - 使用斯特林的阶乘公式

c++ - UMFPACK 和 BOOST 的 uBLAS 稀疏矩阵

c++ - 根据赋值实例化模板函数