Ticket #4905: range.diff

File range.diff, 2.2 KB (added by ru.elric@…, 12 years ago)

patch

  • boost/range/adaptor/map.hpp

     
    1414#include <boost/range/adaptor/transformed.hpp>
    1515#include <boost/range/iterator_range.hpp>
    1616#include <boost/range/value_type.hpp>
     17#include <boost/range/reference.hpp>
    1718
    1819namespace boost
    1920{
     
    2526        template< class Map >
    2627        struct select_first
    2728        {
    28             typedef BOOST_DEDUCED_TYPENAME range_value<Map>::type pair_t;
    29             typedef const BOOST_DEDUCED_TYPENAME pair_t::first_type&
     29            typedef BOOST_DEDUCED_TYPENAME range_reference<const Map>::type reference;
     30            typedef const BOOST_DEDUCED_TYPENAME range_value<Map>::type::first_type&
    3031                result_type;
    3132
    32             result_type operator()( const pair_t& r ) const
     33            result_type operator()( reference r ) const
    3334            {
    3435                return r.first;
    3536            }
     
    3839        template< class Map >
    3940        struct select_second_mutable
    4041        {
    41             typedef BOOST_DEDUCED_TYPENAME range_value<Map>::type pair_t;
    42             typedef BOOST_DEDUCED_TYPENAME pair_t::second_type& result_type;
     42            typedef BOOST_DEDUCED_TYPENAME range_reference<Map>::type reference;
     43            typedef BOOST_DEDUCED_TYPENAME range_value<Map>::type::second_type&
     44                result_type;
    4345
    44             result_type operator()( pair_t& r ) const
     46            result_type operator()( reference r ) const
    4547            {
    4648                return r.second;
    4749            }
     
    5052        template< class Map >
    5153        struct select_second_const
    5254        {
    53             typedef BOOST_DEDUCED_TYPENAME range_value<Map>::type pair_t;
    54             typedef const BOOST_DEDUCED_TYPENAME pair_t::second_type&
     55            typedef BOOST_DEDUCED_TYPENAME range_reference<const Map>::type reference;
     56            typedef const BOOST_DEDUCED_TYPENAME range_value<Map>::type::second_type&
    5557                result_type;
    5658
    57             result_type operator()( const pair_t& r ) const
     59            result_type operator()( reference r ) const
    5860            {
    5961                return r.second;
    6062            }