Synopsis

namespace std {
#define __STD_COMPLEX

        // TEMPLATE CLASSES
template<class T>
    class complex;
template<>
    class complex<float>;
template<>
    class complex<double>;
template<>
    class complex<long double>;

        // TEMPLATE FUNCTIONS
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,
        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,
        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,
        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);
template<class T>
    complex<T> operator-(const complex<T>& lhs);
template<class T>
    bool operator==(const complex<T>& lhs,
        const complex<T>& rhs);
template<class T>
    bool operator==(const complex<T>& lhs,
        const T& rhs);
template<class T>
    bool operator==(const T& lhs,
        const complex<T>& rhs);
template<class T>
    bool operator!=(const complex<T>& lhs,
        const complex<T>& rhs);
template<class T>
    bool operator!=(const complex<T>& lhs,
        const T& rhs);
template<class T>
    bool operator!=(const T& lhs,
        const complex<T>& rhs);
template<class U, class E, class T>
    basic_istream<E, T>&
        operator>>(basic_istream<E, T>& is,
            complex<U>& x);
template<class U, class E, class T>
    basic_ostream<E, T>&
        operator<<(basic_ostream<E, T>& os,
            const complex<U>& x);
template<class T>
    T real(const complex<T>& x);
template<class T>
    T imag(const complex<T>& x);
template<class T>
    T abs(const complex<T>& x);
template<class T>
    T arg(const complex<T>& x);
template<class T>
    T norm(const complex<T>& x);
template<class T>
    complex<T> conj(const complex<T>& x);
template<class T>
    complex<T> polar(const T& rho, const T& theta = 0);
template<class T>
    complex<T> cos(const complex<T>& x);
template<class T>
    complex<T> cosh(const complex<T>& x);
template<class T>
    complex<T> exp(const complex<T>& x);
template<class T>
    complex<T> log(const complex<T>& x);
template<class T>
    complex<T> log10(const complex<T>& x);
template<class T>
    complex<T> pow(const complex<T>& x, int y);
template<class T>
    complex<T> pow(const complex<T>& x, const T& y);
template<class T>
    complex<T> pow(const complex<T>& x,
        const complex<T>& y);
template<class T>
    complex<T> pow(const T& x, const complex<T>& y);
template<class T>
    complex<T> sin(const complex<T>& x);
template<class T>
    complex<T> sinh(const complex<T>& x);
template<class T>
    complex<T> sqrt(const complex<T>& x);

namespace tr1 {     
template<class T>
    complex<T> acos(complex<T>& x);
template<class T>         
    complex<T> asin(complex<T>& x);     
template<class T>          
    complex<T> atan(complex<T>& x);     
template<class T>          
    complex<T> acosh(complex<T>& x);     
template<class T>          
    complex<T> asinh(complex<T>& x);     
template<class T>          
    complex<T> atanh(complex<T>& x);     
template<class T>          
    complex<T> fabs(complex<T>& x);     
} // namespace tr1
} // namespace std