On Tue, 13 Dec 2005 20:44:11 +0100, Pavol Droba
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
] 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
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.