operator+

template<class T>
    complex<T> operator+(const complex<T>& lhs, const complex<T>& rhs);
template<class T>
    complex<T> operator+(const complex<T>& lhs, const T& rhs);
template<class T>
    complex<T> operator+(const T& lhs, const complex<T>& rhs);
template<class T>
    complex<T> operator+(const complex<T>& lhs);

The binary operators each convert both operands to the return type, then return the complex sum of the converted lhs and rhs.

The unary operator returns lhs.