I think you should be able to first implement the operator new
used by placement new:
void* operator new (std::size_t size, void* ptr) noexcept
{
return ptr;
}
(See [new.delete.placement]
in C++11)
Then, you can use placement new the way it's intended to.