Когда это наконец станет defined behavior?
От: Ip Man Китай  
Дата: 27.04.23 10:53
Оценка:
Из p0593, который был принят в C++20:

void process(Stream *stream) {
  unique_ptr<char[]> buffer = stream->read();
  if (buffer[0] == FOO)
    process_foo(reinterpret_cast<Foo*>(buffer.get())); // #1
  else
    process_bar(reinterpret_cast<Bar*>(buffer.get())); // #2
}


(Естественно, принимается что вопрос alignment Foo и Bar решён (или они оба packed)).

Однако я не нашёл в стандарте C++20 упоминания, что reinterpret_cast может начать lifetime объекта. Хотя malloc и memcpy теперь легальны с этой точки зрения, т.е. этот пропозал был включён в стандарт, но обошли reinterpret_cast.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.