Boost logo

Boost :

From: Gabriel Dos Reis (gdr_at_[hidden])
Date: 2004-02-23 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