
Boost : 
From: Gabriel Dos Reis (gdr_at_[hidden])
Date: 20040223 03:26:38
David Abrahams <dave_at_[hidden]> writes:
 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*?
I suppose he wanted to say
template<class T>
T prior(T x, typename std::iterator_traits<T>::different_type n)
?
 > 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.
That would be an isomorphic implementation, indeed.
 Gaby
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk