Boost logo

Boost :

Subject: Re: [boost] [wave] preprocessor directives in output
From: Hartmut Kaiser (hartmut.kaiser_at_[hidden])
Date: 2014-01-21 19:47:14


> On 01/21/2014 04:20 PM, pmenso57_at_[hidden] wrote:
> > Eric, just be very careful about what macros expand when. E.g. the
> expression:
> >
> > !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
> >
> > will get expanded on the first preprocessor pass to something like
> >
> > !defined(1)
> >
> > (or whatever it expands to)
>
>
> Thanks for the warning, and that makes sense, but it's not what I'm
> seeing. I'm seeing wave spit out:
>
> # if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
>
> instead of:
>
> # if !defined(1)
>
> Why would that be? Regardless, I can turn off expansion of this macro
> during preprocessing with wave's -N switch, so there's a fix should I ever
> need it.

Turning off the expansion of macros used in #if conditions can cause all
kind of trouble. All depends on what is inside the wave pragmas:

// this stuff will be seen by wave but not generated

#pragma wave option(output:file)
// this stuff will be preprocessed and written to 'file'
#pragma wave option(output:null)

// this stuff will be seen by wave but not generated

So if it gets expanded outside of the pragma region all is fine. Did I
misunderstand something?

Regards Hartmut
---------------
http://boost-spirit.com
http://stellar.cct.lsu.edu


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