Boost logo

Boost Users :

From: Server Levent Yilmaz (leventyilmaz_at_[hidden])
Date: 2007-06-18 14:58:32


On 6/18/07, Tobias Schwinger <tschwinger_at_[hidden]> wrote:
>
> Server Levent Yilmaz wrote:
> >
> >
> > On 6/18/07, *Roman Perepelitsa* <roman.perepelitsa_at_[hidden]
> > <mailto:roman.perepelitsa_at_[hidden]>> wrote:
> >
> > Tobias Schwinger <tschwinger <at> isonews2.com
> > <http://isonews2.com>> writes:
> >
> > > Yep, here's another dirty trick :
> > >
> > > #include <boost/preprocessor/detail/is_unary.hpp>
> > >
> > > #define SPECIAL (whatever)
> > > #define IS_SPECIAL BOOST_PP_IS_UNARY
> > >
> > > IS_SPECIAL(a) // 0
> > > IS_SPECIAL(b) // 0
> > > IS_SPECIAL(SPECIAL) // 1
> > >
> > > It isn't entirely portable to older preprocessors (that's why
> > this code
> > > lives in preprocessor/detail) but should work with latest
> versions of
> > > the widely-used compilers.
> >
> > This also works:
> >
> > #include <boost/preprocessor/facilities/is_empty.hpp>
> > #include <boost/preprocessor/empty.hpp>
> >
> > #define SPECIAL
> > #define IS_SPECIAL(x) BOOST_PP_IS_EMPTY(BOOST_PP_EMPTY() x)
> >
> >
> >
> > This is great. I am really surprised that it works in a comma separated
> > argument list, and that you can pass around a funny array (4, (a1, a2,
> > , a3) ), and work on it as expected.
>
> This behavior, however, is not backed by the current standard!
>
> That's why Roman added BOOST_PP_EMPTY(), I guess, so the argument itself
> isn't empty and expands to emptiness during expansion of the invoked
> macro.

Take a look at this:

#define SPECIAL
#define IS_SPECIAL(x) BOOST_PP_IS_EMPTY(BOOST_PP_EMPTY() x)

#define MACRO(i,z,array) IS_SPECIAL( BOOST_PP_ARRAY_ELEM(i, array) )
#define ENUM( n, tuple ) BOOST_PP_ENUM( n, MACRO, (n, tuple) )

ENUM( 3, ( arg1, , arg3) ) //1
ENUM( 3, ( arg1, SPECIAL, arg3) ) //2

In this context, can we safely say that 2 complies with standards more than
1?

cheers,
L.

-- 
Server Levent Yilmaz
Mechanical Engineering
University of Pittsburgh


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net