std::arrayのイテレータはポインタとは限らない

boost::arrayのiteratorは、ドキュメント上ポインタであることが明記されていました。

namespace boost {
  template <typename T, std::size_t N> 
  class array {
  public:
    ...
    typedef T*       iterator;
    typedef const T* const_iterator;
    ...
  };
}

Boost 1.49.0 boost::array documentation


C++11のstd::arrayのiteratorは、規格上「implementation-defined(実装定義)」となっているので、環境によってはポインタではないかもしれません。汎用的なコードを書く場合にはご注意を。

namespace std {
  template <class T, size_t N>
  struct array {
    ...
    typedef implementation-defined iterator;
    typedef implementation-defined const_iterator;
    ...
  };
}