odr-used规则不适用于visual studio

时间:2018-05-10 12:07:46

标签: c++ c++11 one-definition-rule

根据definition of odr-used

  

非正式地,如果一个对象的值被读取(除非它是一个编译时常量)或写入,其地址被采用,或者一个引用被绑定到该对象,则该对象被使用; .. ...如果一个对象,一个引用或一个函数被使用,它的定义必须存在于程序的某个地方; 违反此通常是链接时错误。

但是在视觉工作室2015中:

#include <iostream>
using namespace std;

class A{
public:
    static const int k=666;
};

int main() {
    const int&s=A::k;//no warning?undefined behavior?
    cout << &A::k << endl;//no warning,no error?
    return 0;
}

根据cppref:

  

如果使用了odr-used

,则需要在课外定义

1 个答案:

答案 0 :(得分:4)

[basic.def.odr]p10

  

每个程序都应包含每个非内联函数的完全一个定义,或者在废弃语句之外的该程序中使用变量变量; 无需诊断

强调我的。