29 Numerics library [numerics]

29.5 Complex numbers [complex.numbers]

29.5.9 Additional overloads [cmplx.over]

The following function templates shall have additional overloads:
arg                   norm
conj                  proj
imag                  real
The additional overloads shall be sufficient to ensure:
  1. 1.
    If the argument has type long double, then it is effectively cast to complex<long double>.
  2. 2.
    Otherwise, if the argument has type double or an integer type, then it is effectively cast to complex<​double>.
  3. 3.
    Otherwise, if the argument has type float, then it is effectively cast to complex<float>.
Function template pow shall have additional overloads sufficient to ensure, for a call with at least one argument of type complex<T>:
  1. 1.
    If either argument has type complex<long double> or type long double, then both arguments are effectively cast to complex<long double>.
  2. 2.
    Otherwise, if either argument has type complex<double>, double, or an integer type, then both arguments are effectively cast to complex<double>.
  3. 3.
    Otherwise, if either argument has type complex<float> or float, then both arguments are effectively cast to complex<float>.