ARTICLE AD BOX
First of all, it's very difficult to get std::launder to actually affect the generated code. The example on cppreference with a local variable of a polymorphic type is the only one that I know where it matters. So this is a mostly theoretical problem with no practical effect on the standard containers.
1. p0532r0 says std::launder() can not solve this problem;
Firstly, it only says that std::launder can't be used when an allocator uses fancy pointers instead of raw pointers, which is quite obscure.
Secondly, they primarily talk about classes with const or reference members, as those were not transparently replaceable at the time (the term didn't exist then, but that's what they're called now), but they were made transparently replaceable at some point since then.
Thirdly, I don't understand why they focus on transparently replaceable types, since from my understanding the same issue used to happen to all types (since std::vector allocated an array of bytes, not an array of T, so the pointer needed laundering either way).
But since C++20 specifies std::allocator<T>::allocate to start the lifetime of T[N] (but not of its elements, which is a fun way to word this) and return a pointer to its first element, I don't think std::vector needs std::launder at all anymore.
3. p0593r6 ?
Yes, this is what made std::allocator<T>::allocate start the lifetime of T[N].
