Гарантирует ли стандарт С++, что неинициализированные члены POD сохраняют свое предыдущее значение после размещения нового?
Или, точнее, всегда будет выполняться следующее утверждение в соответствии с С++ 11?
#include <cstdlib>
#include <cassert>
struct Foo {
int alpha; // NOTE: Uninitialized
int beta = 0;
};
int main()
{
void* p = std::malloc(sizeof (Foo));
int i = some_random_integer();
static_cast<Foo*>(p)->alpha = i;
new (p) Foo;
assert(static_cast<Foo*>(p)->alpha == i);
}
Является ли ответ одинаковым для С++ 03?