One requirement for comparing boost::arrays is that the element types match exactly, like so:

template<class T, std::size_t N>
    bool operator== (const array<T,N>& x, const array<T,N>& y)

I find it reasonable to allow comparisons of arrays with compatible types, which the following signature allows:

template<class T,std::size_t N,class U>
  bool operator==(const array<T,N>& x,const array<U,N>& y)

Is there a reason for not doing it this way?