Boost logo

Boost :

Subject: Re: [boost] [typeof][implementation]why not use decltype or conditional expr?
From: Nathan Ridge (zeratul976_at_[hidden])
Date: 2012-08-03 19:07:42


> >> Why couldn't the BOOST_TYPEOF macro be defined
> >> to simply use the new keyword, decltype, if
> >> it's available? I assume the macro, BOOST_HAS_DECLTYPE,
> >> indicates whether it is available.
> >
> > I assume Boost.Typeof will eventually
> > be updated to use decltype.
> >
> >> 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


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