Boost logo

Boost :

From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2007-01-08 11:32:11


Doug Gregor wrote:
> On Dec 27, 2006, at 7:55 AM, Tobias Schwinger wrote:
>> here's another result_of question:
>>
>> Given a function object
>>
>> struct f
>> {
>> template< typename T >
>> r<T> operator()(T const &) const;
>>
>> template< typename T >
>> r<T&> operator()(T &) const;
>>
>> template< typename Sig >
>> struct result;
>> };
>>
>> ,
>>
>> result_of< f(some_obj &) >::type // is r<T&>
>> result_of< f(some_obj const & >::type // is r<T>
>>
>> but what about:
>>
>> result_of< f(some_obj) >::type // is r<T>?
>
> Yes, that's right.
>
>> That's what I'd do intuitively. I also found an example (written by
>> Dave) on the net that seems to do the same:
>>
>> http://tinyurl.com/yzeenu
>>
>> But wait: the TR1 text is talking about lvalues so I probably
>> should let F::result return r<T&>?!
>
> TR1 says...
>
> Given an rvalue f of type F and values t1, t2, ..., tN of types T1,
> T2, ..., TN, respectively, the type member
> is the result type of the expression f(t1, t2, ...,tN). The values
> ti are lvalues when the corresponding type Ti is
> a reference type, and rvalues otherwise.

Sorry - it seems I missed that last part of the sentence, somehow (maybe
by looking at the wrong version?).

>
> So with result_of< F(some_obj)>, we treat some_obj as an rvalue, and
> get the same result as for result_of< f(some_obj const & >.

OK, got it. Thank you!

Regards,
Tobias


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk