Boost logo

Boost Users :

From: Thore Karlsen (sid_at_[hidden])
Date: 2005-12-13 15:02:31


On Tue, 13 Dec 2005 20:44:11 +0100, Pavol Droba <droba_at_[hidden]>
wrote:

[...]

>> Hmm.. I can use a const value just fine, but I can't use a temporary. At
>> least not in VC++ 8.0 with the warning level set to 4 (I compile all my
>> code at warning level 4). I get a warning C4239:
>>
>> warning C4239: nonstandard extension used : 'argument' : conversion from
>> 'boost::iterator_range<IteratorT>' to 'range &'
>> with
>> [
>>
>> IteratorT=std::_String_const_iterator<char,std::char_traits<char>,std::allocator<char>>
>> ]
>> A non-const reference may only be bound to an lvalue
>>

>I see your problem now. The restriction of temporaries is important in find algorithms.
>Since they return 'a reference' (in the form of iterator_range) into the input,
>passing a temporary there is dangerous.
>
>split can be used this way too:
>
>vector<iterator_range<string::iterator> > result;
>string str("hello world");
>
>split(result, str, is_space);
>
>
>I see no universal solution here until r-value reference will be added to the language.
>Until then I prefer the 'safer' one (given the fact, that it is not very restrictive and
>can be easily workarounded)

Thanks, that makes sense. I don't mind working around it if this is by
design, I just wanted to make sure. It's a very minor inconvenience
anyway. Thanks for the great work!

-- 
Be seeing you.

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