Boost logo

Boost Users :

Subject: Re: [Boost-users] [wave] Wave macro expansion problem
From: Hartmut Kaiser (hartmut.kaiser_at_[hidden])
Date: 2013-09-10 07:13:59


> The code:
>
> // test_macros_o.cpp
>
> #define f(a) f(x + (a))
> #define x 2
> #define g f
> #define h g(~
>
> int main()
> {
>
> #pragma wave trace(enable)
>
> h 5);
>
> #pragma wave trace(disable)
>
> return 0;
> }
>
> In the latest C++ standard at 16.3.5 paragraph 5 the expansion of 'h 5)'
> is given as:
>
> f(2 * (~5))
>
> but the wave.exe driver gives:
>
> C:\Programming\VersionControl\boost\libs\vmd\test\test_macros_o.cpp:11:3:
> h
>
> C:\Programming\VersionControl\boost\libs\vmd\test\test_macros_o.cpp:4:9:
> see macro definition: h
> [
> g(~
> rescanning
> [
>
> C:\Programming\VersionControl\boost\libs\vmd\test\test_macros_o.cpp:3:9:
> see macro definition: g
> [
> f
> rescanning
> [
> f
> ]
> ]

It actually should say something like:

t.cpp:13:4: error: improperly terminated macro invocation or replacement-
list terminates in partial macro expansion (not supported yet): missing ')'

This is a known bug in wave caused by its recursive expansion algorithm
which does not allow to handle this pathologic corner case. All I could do
was to detect and report this.

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


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