Когда переменная odr используется в C ++ 14?

Проект C ++ 14 (N3936) гласит в п. 3.2 / 3:

Переменная x, имя которой появляется в качестве потенциально оцениваемого выражения ex, используется odr, если только при применении преобразования lvalue-to-rvalue (4.1) в x не получается константное выражение (5.19), которое не вызывает никаких нетривиальных функций и, если x - это объект, ex - это элемент набора потенциальных результатов выражения e, где к e применяется либо преобразование lvalue-в-значение (4.1), либо e - выражение с отброшенными значениями (раздел 5).

Это не имеет никакого смысла для меня: если выражениеe этовыражение отброшенного значения зависит от контекста, в которомe используется. Каждое выражение, используемое вВыражение-заявление (§6.2) являетсявыражение отброшенного значения, Еслипреобразование lvalue в rvalue применяется кe также зависит от контекстаe используется в.

Более того, что означает выражение для множествапотенциальные результаты другого выражения. Нужно понятие равенства выражений, чтобы определить членство в наборе. Но у нас нетссылочная прозрачностьпоэтому я не вижу, как этого можно достичь.

Почему это было изменено с C ++ 11 на C ++ 14? И как это следует интерпретировать? В нынешнем виде это не имеет смысла.

Ответы на вопрос(1)

Ваш ответ на вопрос