Boost logo

Boost :

From: Thorsten Ottosen (thorsten.ottosen_at_[hidden])
Date: 2006-05-08 17:35:18

Eric Niebler wrote:

> David Abrahams wrote:

>>> Your patch gets everything all mixed up.
>> That's rather a bald and sweeping statement to make without any
>> explanation. What do you really mean by "everything" in this case?
> Everything, in this case, means the separate and orthogonal
responsibilities of the three range metafunctions.
> This is a potentially breaking change. Consider a range adaptor...
> template<typename Range> struct some_adaptor
> {
> typedef typename range_iterator<Range>::type iterator;
> typedef typename range_const_iterator<Range>::type const_iterator;
> ....
> };
> In this case, you really don't care about the const-ness of Range --
you just want the nested ::iterator type. And anyplace someone is using
these metafunctions to perform type computations where const-ness
doesn't matter will now be broken.

In the new version, this is how range_iterator is defined:

namespace boost
     template< typename C >
     struct range_iterator
             mpl::if_< BOOST_DEDUCED_TYPENAME is_const<C>::type,
                       BOOST_DEDUCED_TYPENAME range_const_iterator<
                           BOOST_DEDUCED_TYPENAME remove_const<C>::type
range_mutable_iterator<C>::type >::
type type;

} // namespace boost


Boost list run by bdawes at, gregod at, cpdaniel at, john at