<valarray>

<valarray>

gslice · gslice_array · indirect_array · mask_array · slice · slice_array · valarray · valarray<bool>

abs · acos · asin · atan · atan2 · cos · cosh · exp · log · log10 · max · min · operator!= · operator% · operator& · operator&& · operator> · operator>> · operator>= · operator< · operator<< · operator<= · operator* · operator+ · operator- · operator/ · operator== · operator^ · operator| · operator|| · pow · sin · sinh · sqrt · tan · tanh

namespace std {
class slice;
class gslice;
        // TEMPLATE CLASSES
template<class T>
    class valarray;
template<class T>
    class slice_array;
template<class T>
    class gslice_array;
template<class T>
    class mask_array;
template<class T>
    class indirect_array;
        // TEMPLATE FUNCTIONS
template<class T>
    valarray<T> operator*(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<T> operator*(const valarray<T> lhs,
        const T& rhs);
template<class T>
    valarray<T> operator*(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<T> operator/(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<T> operator/(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<T> operator/(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<T> operator%(const valarray<T>& lhs,
        const vararray<T>& rhs);
template<class T>
    valarray<T> operator%(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<T> operator%(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<T> operator+(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<T> operator+(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<T> operator+(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<T> operator-(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<T> operator-(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<T> operator-(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<T> operator^(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<T> operator^(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<T> operator^(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<T> operator&(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<T> operator&(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<T> operator&(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<T> operator|(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<T> operator|(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<T> operator|(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<T> operator<<(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<T> operator<<(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<T> operator<<(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<T> operator>>(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<T> operator>>(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<T> operator>>(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<bool> operator&&(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<bool> operator&&(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<bool> operator&&(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<biil> operator||(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<bool> operator||(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<bool> operator||(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<bool> operator==(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<bool> operator==(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<bool> operator==(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<bool> operator!=(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<bool> operator!=(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<bool> operator!=(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<bool> operator<(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<bool> operator<(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<bool> operator<(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<bool> operator>=(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<bool> operator>=(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<bool> operator>=(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<bool> operator>(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<bool> operator>(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<bool> operator>(const T& lhs, const valarray<T>& rhs);
template<class T>
    valarray<bool> operator<=(const valarray<T>& lhs,
        const valarray<T>& rhs);
template<class T>
    valarray<bool> operator<=(const valarray<T> lhs, const T& rhs);
template<class T>
    valarray<bool> operator<=(const T& lhs, const valarray<T>& rhs);
template<class T>
    T max(const valarray<T>& x);
template<class T>
    T min(const valarray<T>& x);
template<class T>
    valarray<T> abs(const valarray<T>& x);
template<class T>
    valarray<T> acos(const valarray<T>& x);
template<class T>
    valarray<T> asin(const valarray<T>& x);
template<class T>
    valarray<T> atan(const valarray<T>& x);
template<class T>
    valarray<T> atan2(const valarray<T>& x,
        const valarray<T>& y);
template<class T>
    valarray<T> atan2(const valarray<T> x, const T& y);
template<class T>
    valarray<T> atan2(const T& x, const valarray<T>& y);
template<class T>
    valarray<T> cos(const valarray<T>& x);
template<class T>
    valarray<T> cosh(const valarray<T>& x);
template<class T>
    valarray<T> exp(const valarray<T>& x);
template<class T>
    valarray<T> log(const valarray<T>& x);
template<class T>
    valarray&ttT> log10(const valarray<T>& x);
template<class T>
    valarray<T> pow(const valarray<T>& x,
        const valarray<T>& y);
template<class T>
    valarray<T> pow(const valarray<T> x, const T& y);
template<class T>
    valarray<T> pow(const T& x, const valarray<T>& y);
template<class T>
    valarray<T> sin(const valarray<T>& x);
template<class T>
    valarray<T> sinh(const valarray<T>& x);
template<class T>
    valarray<T> sqrt(const valarray<T>& x);
template<class T>
    valarray<T> tan(const valarray<T>& x);
template<class T>
    valarray<T> tanh(const valarray<T>& x);
    };

Include the standard header <valarray> to define the template class valarray and numerous supporting template classes and functions. These template classes and functions are permitted unusual latitude, in the interest of improved performance. Specifically, any function returning valarray<T> may return an object of some other type T'. In that case, any function that accepts one or more arguments of type valarray<T> must have overloads that accept arbitrary combinations of those arguments, each replaced with an argument of type T'. (Put simply, the only way you can detect such a substitution is to go looking for it.)