The effect of instantiating the template
complex
for any type other than float, double, or long double is unspecified.

If the result of a function is not mathematically defined or not in
the range of representable values for its type, the behavior is
undefined.

If z is an lvalue of type cv complex<T> then:

- the expression reinterpret_cast<cv T(&)[2]>(z) is well-formed,
- reinterpret_cast<cv T(&)[2]>(z)[0] designates the real part of z, and
- reinterpret_cast<cv T(&)[2]>(z)[1] designates the imaginary part of z.