Boost logo

Boost :

Subject: Re: [boost] [typeof][implementation]why not use decltype or conditional expr?
From: Larry Evans (cppljevans_at_[hidden])
Date: 2012-08-04 10:13:58


On 08/03/12 18:07, Nathan Ridge wrote:
[snip]
>
>>>> And if decltype not available, why couldn't it use the
>>>> conditional expression method described here:
>>>>
>>>> http://www.artima.com/cppsource/foreach2.html
>>>>
>>>> I would think that would be simpler and more portable.
>>>>
>>>
>>> I don't see how it's possible to implement
>>> BOOST_TYPEOF this way.
>>
>> On page:
>>
>> http://www.artima.com/cppsource/foreach2.html
>>
>> there's this:
>>
>> If only there were a way to get the type of an expression without
>> evaluating the expression. There is! The unique properties of the
>> conditional operator allow us to sidestep the issue entirely. The
>> ENCODED_TYPEOF macro defined below encodes the type of an expression
>> without evaluating it. Read on to see how it works.
>>
>> IIUC, the purpose of decltype is to "get the type of an expression
>> without evaluating the expression"; hence, if the current BOOST_TYPEOF
>> can be implemented with decltype, and the above quote from foreach2.html
>> is correct, then the current BOOST_TYPEOF can be implemented with the
>> method described in the foreach2.html page.
>>
>> Am I missing something?
>
> The conditional operator trick gives you an *expression* E of the
> same typeas another expression F, without evaluating F.
> Typeof/decltype gives you the *type* of an expression F. You can't
> go from the first to the second without... well typeof/decltype.
>
> Regards,Nate

Thanks Nate. The emphasis on *expression* and *type* cleared things
up. The foreach2.html phrase:

  get the type of an expression

was kinda easy to misinterpret. Only after careful examination of the
code did the actual purpose, the one you gave, become clear.

-regards,
Larry


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