Проект С++ 14 (N3936) гласит в § 3.2/3:
Переменная x, имя которой отображается как потенциально вычисленное выражение ex, используется odr, если применение преобразования lvalue-to-rvalue (4.1) к x не дает постоянного выражения (5.19), которое не вызывает никаких нетривиальных функций и, если x является объектом, ex является элементом множества потенциальных результатов выражения e, где либо lvalue-rvalue conversion (4.1) применяется к e, либо e является выражением отбрасываемого значения (пункт 5).
Это не имеет для меня никакого смысла: если выражение e
является выражением отбрасываемого значения, оно зависит от контекста, в котором используется e
. Каждое выражение, используемое в выражении-выражении (§6.2), является выражением отбрасываемого значения. Если преобразование lvalue-rvalue применяется к e
, также зависит от контекста e
.
Кроме того, что означает, что выражение должно быть в множестве потенциальных результатов другого выражения. Для определения принадлежности к множеству нужно понятие равенства выражений. Но у нас нет ссылочной прозрачности, поэтому я не вижу, как это может быть достигнуто.
Почему это изменилось с С++ 11 на С++ 14? И как это следует интерпретировать? Как бы то ни было, это не имеет смысла.