Изменяются ли категории значений C++/правила исключения копирования с помощью C++26 replaceable_if_eligible?C++

Программы на C++. Форум разработчиков
Anonymous
Изменяются ли категории значений C++/правила исключения копирования с помощью C++26 replaceable_if_eligible?

Сообщение Anonymous »

  • Как концепция тривиального перемещения из C++26 меняет наши рассуждения о категориях значений?
  • Взаимодействуют ли они вообще (например, правила временной материализации)?
  • Например, если у меня есть переменная (so lvalue) для тривиально перемещаемого типа и я перемещаю значение куда-то, создает ли она значение prvalue вместо значения x?
  • Становится ли UB для использования указателя на перемещенное значение?
Пример кода для иллюстративных целей (как указано в комментариях):
struct X
trivially_relocatable
replaceable_if_eligible
{
// ...
};

struct Y
trivially_relocatable
replaceable_if_eligible
{
X some_x;
};

void f()
{
// Point 3: is the initialization of `x` a prvalue?
X x = Y{}.some_x;
}

void g()
{
Y y;

// ...

// Point 4: assuming `y` has been relocated, is the following an UB?
(&y)->some_x;
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... le-if-elig

Вернуться в «C++»