Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2004-02-22 21:38:19


Daniel Frey <daniel.frey_at_[hidden]> writes:

> Consider:
>
> // A strange way to retrieve my_container.begin():
> boost::prior( my_container.end(), my_container.size() );
>
> Is that legal? The second template parameter of boost::prior is
> deduced to an unsigned(!) type, which IMHO means that -n is undefined,
> right? Do we need to fix this? Maybe:
>
> template <class T>
> T prior(T x, typename T::difference_type n)
> {
> std::advance(x, -n);
> return x;
> }

Well, that wouldn't work!
How would you call prior(p, 4) when p is int*?

> or shall we document that it's illegal/undefined to call
> boost::prior() with an unsigned second parameter?

Hmm, no I think if it's unsigned we should either deduce an
appropriate signed type or implement the "backward advance"
ourselves. We could use reverse_iterator to do that, FWIW.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk