Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2005-05-09 08:25:49

Daniel Wallin <dalwan01_at_[hidden]> writes:

> David Abrahams wrote:
> [...]
>> The question is, what should we do about this? It turns out to be
>> surprisingly hard to write the declarations of these temporary
>> variables so they work in all cases. For example, v had to be a
>> const& because in one case index_result<...>::type turned out to be
>> char const[4]
>> and when the default is used, it's
>> double
>> with p[value || ...] returning a double rvalue (by value).
>> Thoughts?
> Make the user add reference to the Default type instead of
> index_result<>::type?

I don't fully understand what you're proposing or what it's supposed
to address, but I think you might be missing the point. To make it
safe to use, ideally

  index_result<...>::type whatever = p[x | some-expression];

would always cause a by-value return from p[...] when some-expression
is an rvalue.

By the same token,

     f( p[x | some-expression] )

should always return by-reference from p[...], for efficiency.

This has a little less to do with how the user declares
index_result<...>::type than with the result of indexing.

Dave Abrahams
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at