Suppose I have a type template parameter T.

And suppose I have a `std::aligned_storage` as follows:

```
typename std::aligned_storage<sizeof(T), alignof(T)>::type storage;

```

I want to placement new a T into the `storage`.

What is the standard-compliant pointer value/type to pass to the placement new operator, and how do I derive that from `storage`?

```
new (& ???) T(a,b,c);

```

For example:

```
new (&storage) T(a,b,c);
new (static_cast<void*>(&storage)) T(a,b,c);
new (reinterpret_cast<T*>(&storage)) T(a,b,c);
new (static_cast<T*>(static_cast<void*>(&storage));

```

Which of the above (if any) are compliant, and if none, what is the better way?