Boost logo

Boost Users :

Subject: Re: [Boost-users] iterator_facade and distance()
From: Dave Abrahams (dave_at_[hidden])
Date: 2011-04-16 19:54:21

At Sun, 17 Apr 2011 08:43:00 +0900,
Andrej van der Zee wrote:
> Hi Dave,
> Thanks for your email.
> >
> > Not unless yours is a random access iterator.  Is it?
> >
> Its a forward iterator. Changing it to a random access iterator solves
> it indeed.
> This is my first iterator that I am writing, but why is it not
> possible to implement a custom distance method for forward iterators?

The implementation of std::distance only has the iterator category to
go on when deciding whether to move by many steps or by one jump.
There isn't any other information it can use.

> Am I doing something conceptually wrong?

Could be. If you can move your iterator by N steps in one jump, maybe
it should be a random access iterator.

> Or should I specialize the
> std::distance() function?

You could specialize that function for specific iterator types.
There's no partial specialization of function templates, and you're
not allowed to add an overload to namespace std.

Dave Abrahams
BoostPro Computing

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at