Сообщение Re[2]: Когда это наконец станет defined behavior? от 02.05.2023 14:00
Изменено 02.05.2023 14:08 σ
Re[2]: Когда это наконец станет defined behavior?
IM>>Из p0593, который был принят в C++20:
IM>>Однако я не нашёл в стандарте C++20 упоминания, что reinterpret_cast может начать lifetime объекта. Хотя malloc и memcpy теперь легальны с этой точки зрения, т.е. этот пропозал был включён в стандарт, но обошли reinterpret_cast.
К>lifetime начинается с момента выделения памяти под объект типа implicitly created type
Если такой объект создан. А создаётся он если это необходимо для придания программе определённого поведения.
К>а делать реинтерпрет прямо сейчас или когда угодно позже — какая разница?
Разница в том, что нужен launder вокруг reinterpret_cast. В пропозале его нет. И пропозал не отменяет его необходимости.
IM>>Однако я не нашёл в стандарте C++20 упоминания, что reinterpret_cast может начать lifetime объекта. Хотя malloc и memcpy теперь легальны с этой точки зрения, т.е. этот пропозал был включён в стандарт, но обошли reinterpret_cast.
К>lifetime начинается с момента выделения памяти под объект типа implicitly created type
Если такой объект создан. А создаётся он если это необходимо для придания программе определённого поведения.
К>а делать реинтерпрет прямо сейчас или когда угодно позже — какая разница?
Разница в том, что нужен launder вокруг reinterpret_cast. В пропозале его нет. И пропозал не отменяет его необходимости.
Re[2]: Когда это наконец станет defined behavior?
IM>>Из p0593, который был принят в C++20:
IM>>Однако я не нашёл в стандарте C++20 упоминания, что reinterpret_cast может начать lifetime объекта. Хотя malloc и memcpy теперь легальны с этой точки зрения, т.е. этот пропозал был включён в стандарт, но обошли reinterpret_cast.
К>lifetime начинается с момента выделения памяти под объект типа implicitly created type
Если такой объект создан. А создаётся он если это необходимо для придания программе определённого поведения.
К>а делать реинтерпрет прямо сейчас или когда угодно позже — какая разница?
Разница в том, что нужен launder вокруг reinterpret_cast. В примере в пропозале его нет. И пропозал не отменяет его необходимости.
IM>>Однако я не нашёл в стандарте C++20 упоминания, что reinterpret_cast может начать lifetime объекта. Хотя malloc и memcpy теперь легальны с этой точки зрения, т.е. этот пропозал был включён в стандарт, но обошли reinterpret_cast.
К>lifetime начинается с момента выделения памяти под объект типа implicitly created type
Если такой объект создан. А создаётся он если это необходимо для придания программе определённого поведения.
К>а делать реинтерпрет прямо сейчас или когда угодно позже — какая разница?
Разница в том, что нужен launder вокруг reinterpret_cast. В примере в пропозале его нет. И пропозал не отменяет его необходимости.