29 Numerics library [numerics]

29.4 Complex numbers [complex.numbers]

29.4.1 General [complex.numbers.general]

The header <complex> defines a class template, and numerous functions for representing and manipulating complex numbers.
The effect of instantiating the template complex for any type that is not a cv-unqualified floating-point type ([basic.fundamental]) is unspecified.
Specializations of complex for cv-unqualified floating-point types are trivially copyable literal types ([basic.types.general]).
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.
Moreover, if a is an expression of type cv complex<T>* and the expression a[i] is well-defined for an integer expression i, then:
  • reinterpret_cast<cv T*>(a)[2*i] designates the real part of a[i], and
  • reinterpret_cast<cv T*>(a)[2*i + 1] designates the imaginary part of a[i].