namespace boost {
template<typename T, std::size_t N> class array;
template<typename T, std::size_t N>
bool operator==(const array< T, N > &, const array< T, N > &);
template<typename T, std::size_t N>
bool operator<(const array< T, N > &, const array< T, N > &);
template<typename T, std::size_t N>
bool operator!=(const array< T, N > &, const array< T, N > &);
template<typename T, std::size_t N>
bool operator>(const array< T, N > &, const array< T, N > &);
template<typename T, std::size_t N>
bool operator<=(const array< T, N > &, const array< T, N > &);
template<typename T, std::size_t N>
bool operator>=(const array< T, N > &, const array< T, N > &);
template<typename T, std::size_t N>
void swap(array< T, N > &, array< T, N > &);
template<typename T, std::size_t N>
T(& get_c_array(boost::array< T, N > & arg);
template<typename T, std::size_t N>
const T(& get_c_array(const boost::array< T, N > & arg);
template<typename It> std::size_t hash_range(It, It);
template<typename T, std::size_t N>
std::size_t hash_value(const array< T, N > &);
template<size_t Idx, typename T, size_t N> T & get(boost::array< T, N > &);
template<size_t Idx, typename T, size_t N>
const T & get(const boost::array< T, N > &);
}namespace std {
template<size_t Idx, typename T, size_t N>
T & get(boost::array< T, N > & arr);
template<size_t Idx, typename T, size_t N>
const T & get(const boost::array< T, N > & arr);
}