jeudi 10 mai 2018

odr-used rule does not apply in visual studio

According to the definition of odr-used:

Informally, an object is odr-used if its value is read (unless it is a compile time constant) or written, its address is taken, or a reference is bound to it; ..... If an object, a reference or a function is odr-used, its definition must exist somewhere in the program; a violation of that is usually a link-time error.

But here in visual studio 2015:

#include <iostream>
using namespace std;

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

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

According to cppref:

a definition outside of class is required if it is odr-used

Aucun commentaire:

Enregistrer un commentaire