$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [algorithm] to_lower_copy / to_upper_copy with no output param assumes sequence to be same as input
From: Sebastian Karlsson (sairony_at_[hidden])
Date: 2011-06-23 07:26:21
2011/6/23 Olaf van der Spek <ml_at_[hidden]>:
> On Wed, Jun 22, 2011 at 3:05 PM, Sebastian Karlsson <sairony_at_[hidden]> wrote:
>> It would seem: std::string foo = boost::algorithm::to_lower_copy<
>> std::string >( "bar" ); isn't valid. Instead one has to do for
>> example: std::string foo = boost::algorithm::to_lower_copy(
>> std::string( "bar" ) ), which while perhaps just as terse and natural
>> creates an extra unneeded temporary. I propose the following addition,
>> as well as one for to_upper_copy:
>>
>> template<typename OutputSequenceT, typename RangeT>
>> inline OutputSequenceT
>> to_lower_copy(
>> const RangeT& Input,
>> const std::locale& Loc=std::locale())
>> {
>> OutputSequenceT Output( ::boost::begin( Input ), ::boost::end( Input ) );
>
> Doesn't this also do an unnecessary copy?
>
> Olaf
It does, but it uses one less which as stated is a prime candidate for
NRVO. The current approach needs one temporary for the return value as
well as a temporary for argument conversion, which is basically only
there to inform about the return type.
Kind regards,
Sebastian Karlsson