Boost logo

Boost Users :

Subject: Re: [Boost-users] [multi_index] iterating over keys and "extracting" key extractors
From: Nick Stokes (randomaccessiterator_at_[hidden])
Date: 2015-03-19 14:17:54


There is a problem... I noticed, when used as follows with boost::range,

for( string& s : foos.get<1>() | boost::adaptors::transformed(
m.get<1>().key_extractor() ) )
   ...

Visual Studio 2012 generates an ugly warning " warning C4172: returning
address of local variable or temporary", and compiles. It also compiles on
clang and gcc (sorry for not being too specific with versions, modern
ones). But this is suspicious enough so I poked around a little bit.
Sure enough, the key_from_value (the return type of key_extractor()) is a
functor which is like

template< .. class Value .. >
struct key_from_value {
     typedef Value result_type; // not Value&

     Value& operator()( Foo&.. ) const { .. }

};

So isn't result_type being a non-reference type a problem here, given
operator() is returning &?

Regards,
Nick

On Thu, Mar 19, 2015 at 9:09 AM, Nick Stokes <randomaccessiterator_at_[hidden]
> wrote:

> Thanks Joaquín
>
> On Wed, Mar 18, 2015 at 3:45 PM, Joaquin M Lopez Munoz <joaquin_at_[hidden]>
> wrote:
>
>> Nick Stokes <randomaccessiterator <at> gmail.com> writes:
>>
>> >
>> > Q1: Is there a builtin in way in MI to iterate over keys rather
>> > than elements? I.e. the iterator's value type will be that of the
>> > key, not the element.
>>
>> No, there's none. Some iterator adaption is needed as you mention
>> below.
>>
>> > Q2: Is there a way to obtain the type of key extractors given a
>> > multi index container? (it is related to Q1, as this sort of a
>> > thing could be passed to boost::transform iterator to obtain an
>> > alternative answer for Q1)
>>
>> auto beg=boost::make_transform_iterator(
>> foos.get<1>().begin(),foos.get<1>().key_extractor()),
>> end=boost::make_transform_iterator(
>> foos.get<1>().end(),foos.get<1>().key_extractor());
>>
>> std::copy(
>> beg,end,std::ostream_iterator<std::string>(std::cout," "));
>>
>> Joaquín M López Muñoz
>> Telefónica
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net