Non-member logical operations

Non-member logical operators are provided to allow for variations of order of the operation.

  template<class T> valarray<bool> operator==
  (const valarray&, const T&);
  template<class T> valarray<bool> operator==
  (const T&, const valarray&);
  template<class T> valarray<bool> operator!=
  (const valarray&, const T&);
  template<class T> valarray<bool> operator!=
  (const T&, const valarray&);
  template<class T> valarray<bool> operator< 
  (const valarray&, const T&);
  template<class T> valarray<bool> operator< 
  (const T&, const valarray&);
  template<class T> valarray<bool> operator>
   (const valarray&, const T&);
  template<class T> valarray<bool> operator> 
  (const T&, const valarray&);
  template<class T> valarray<bool> operator<=
  (const valarray&, const T&);
  template<class T> valarray<bool> operator<=
  (const T&, const valarray&);
  template<class T> valarray<bool> operator>=
  (const valarray&, const T&);
  template<class T> valarray<bool> operator>=
  (const T&, const valarray&);
  template<class T> valarray<bool> operator&&
  (const valarray<T>&, const T&);
  template<class T> valarray<bool> operator&&
  (const T&, const valarray<T>&);
  template<class T> valarray<bool> operator||
  (const valarray<T>&, const T&);
  template<class T> valarray<bool> operator||
  (const T&, const valarray<T>&);
  
Remarks

The result of these operations is a bool array whose length is equal to the length of the array argument. Each element of the returned array is the result of a logical match.