правило odr-used не применяется в visual studio - PullRequest
0 голосов
/ 10 мая 2018

В соответствии с определением odr-used:

Неформально объект используется в odr, если его значение читается (если только оно не является постоянной времени компиляции) илизаписано, взят его адрес или привязана ссылка; ..... Если используется объект, ссылка или функция odr, его определение должно существовать где-то в программе; нарушение, которое обычно является ошибкой во время соединения.

Но здесь, в 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?undefined behavior?
    cout << &A::k << endl;//no warning,no error?
    return 0;
}

Согласно cppref:

требуется определение вне класса, если оно используется odr

1 Ответ

0 голосов
/ 10 мая 2018

[basic.def.odr] p10

Каждая программа должна содержать ровно одно определение каждой не встроенной функции или переменную, которая используется odr в этой программе за пределами отброшенного оператора; Диагностика не требуется .

Акцент мой.

...