Из
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.