Категории значений C++11 (lvalues, xvalues и prvalues) глубоко связаны с ядром самого C++ таким образом, что невозможно рассуждать о C++ без рассуждений о семантике значений.
C++17 сгладил объектную модель, поэтому у нас есть такие вещи, как гарантированное исключение копирования, что делает более предсказуемым узнать, когда происходит создание/уничтожение/временная материализация и т. д. сцены.
В C++26 введена концепция тривиальной перемещаемости, позволяющая пропустить уничтожение некоторых перемещенных значений. Мне интересно, каковы последствия, когда я рассуждаю о выражениях C++, сосредоточив внимание на категориях значений.
Например, если у меня есть переменная (so lvalue) для тривиально перемещаемого типа и я перемещаю значение куда-то, создает ли она prvalue вместо значения x?
Становится ли это UB для использования указателя на перемещенное значение?
А как насчет временного значения? материализация? Изменятся ли какие-нибудь правила?
Подробнее здесь: https://stackoverflow.com/questions/798 ... rivially-r