(второе предложение). В первом случае тип существующего значения prvalue корректируется, в то время как во втором случае создается новое значение prvalue с типом, квалифицированным cv, который корректируется с помощью [expr.type] / 2, так что объект с типом cv-unqualified будет материализовано, что является дефектом.

родолжение моегопредыдущий вопросгде очевидный консенсус заключался в том, что изменение в обработке cv-квалификаций prvalues ​​было довольно незначительным и несущественным изменением, предназначенным для устранения некоторых несоответствий (например, функции, возвращающие prvalues ​​и объявленные с cv-квалифицированными типами возврата).

Тем не менее, я вижу другое место в стандарте, которое, как представляется, полагается на prvalues, имеющие cv-квалифицированные типы: инициализацияconst ссылки с првалу черезвременная материализация конверсии, Соответствующая формулировка может быть найдена в нескольких местах в9.3.3 / 5

[...] Если преобразованный инициализатор является prvalue, его тип T4 настраивается на тип «cv1 T4» ([conv.qual]) и применяется временное преобразование материализации ([conv.rval]) [...]

[...] В противном случае выражение инициализатора неявно преобразуется в значение типа «cv1 T1». Применяется временное преобразование материализации, и ссылка привязывается к результату.

Намерение, очевидно, состоит в том, чтобы убедиться, что когда мы доберемся до фактическоговременная материализация конверсии

7.3.4 Преобразование временной материализации
1 Prvalue типа T может быть преобразовано в xvalue типа T. Это преобразование инициализирует временный объект ([class.teilitary]) типа T из prvalue, оценивая prvalue с временным объектом в качестве его объекта результата, и создает xvalue обозначает временный объект. [...]

типT то, что он получает в качестве входных данных, включает необходимые cv-квалификации.

Но как эта квалификация переживает7.2.2 / 2 в случае не-класса, не массива prvalue?

7.2.2 Тип
2 Если значение изначально имеет тип «cv T», где T - неквалифицированный cv некласс, не массив, тип выражения корректируется до T перед любым дальнейшим анализом.

Или это?

Например. какие временные мы получаем в этом примере

const int &r = 42;

Является временнымconst или нет? Можем мы сделать

const_cast<int &>(r) = 101; // Undefined or not?

без запуска неопределенного поведения? Если я не ошибаюсь, первоначальное намерение было получитьconst int временно в таких случаях. Это все еще правда? (Для типов классов ответ ясен - мы получаемconst временный.)

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

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