Верен ли стандартный пример ODR?

Прежде чем ответить, обратите внимание, что другой вопрос тесно связан.

Стандарт C++17 (черновик здесь< /а>), разд. 6.2(2.8), дает следующий пример:

struct S { static const int x = 0; };
const int &f(const int &r);
int n = b ? (1, S::x) // S::x is not odr-used here
          : f(S::x);  // S::x is odr-used here, so a definition is required

"odr" в примере означает "правило с одним определением", но комментарий к примеру "S::x здесь не используется odr" кажется мне чепухой. Это?

Я не языковой юрист, но, к сожалению, комментарий не передает мне правдоподобного или приблизительного представления. Это говорит о том, что мне не хватает концепции.

С другой стороны, 1600-страничный документ, подобный стандарту C++17, может содержать некоторые ошибки. Я не критикую, а просто хочу убедиться, что я понял.

Комментарий ерунда или что-то разумное имеет в виду? Как или почему, пожалуйста?


person thb    schedule 13.02.2019    source источник
comment
Похоже, это объясняется в верхнем ответе здесь: stackoverflow.com/questions/23491781/   -  person NathanOliver    schedule 13.02.2019
comment
Применение преобразования lvalue-to-rvalue к S::x дает постоянное выражение, поэтому S::x не используется в odr для [basic.def.odr]/4 и [expr.const]/2.7.   -  person YSC    schedule 13.02.2019
comment
Я мог бы скопировать / вставить свой удаленный ответ на связанный вопрос здесь, tbh.   -  person YSC    schedule 13.02.2019
comment
@NathanOliver О, понятно. Я бы не нашел этот более ранний ответ, если бы вы не указали мне на него. Ввиду предыдущего ответа приведенный мной пример не раскрывает основной концепции, а просто иллюстрирует второстепенный момент, касающийся static const элементов данных. Таким образом, я ни о чем не беспокоился. Спасибо за ссылку.   -  person thb    schedule 13.02.2019
comment
Обратите внимание, что технический термин, используемый в объяснении этого кода, является odr-используемым, а не odr. ODR-используемый означает, что используется таким образом, что инициирует применение ODR.   -  person Pete Becker    schedule 13.02.2019