Non-standard library placement new with user-defined allocators
<p>A non-standard library placement new calls a user defined operator new:</p>

<pre><code>class T {};

void* operator new(std::size_t s, T*) {
    return new char[s];
}

int main() {
    T* t;
    new(t) T(); // calls operator new above
    return 0;
}
</code></pre>

<p>However, if I am not wrong, the standard placement new does not call the default operator new. This separation allows the standard allocator to use operator new in <code>allocate()</code> to get the memory and placement new to initialize it, with either std::initialize_fill() or <code>construct()</code></p>

<p>Now I don't understand how can I keep the allocation separated from the initialization in a custom allocator when a non-standard placement new is used, since the non-standard placement new always calls a user-defined operator new. Should always force the use of the standard placement new with a static_cast in any allocator?</p>
