
2011/6/23 Olaf van der Spek <ml@vdspek.org>:
On Wed, Jun 22, 2011 at 3:05 PM, Sebastian Karlsson <sairony@gmail.com> 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