JoseD wrote:
> Hi. Just wanted to share that the following macro gives an error on latest
> versions of GCC, but is reported to work on 2.95.3 (tested on MorphOS but
> should be the same for other OSses of course).
> Both an old version of SASC(AmigaOS) and Borland (on X86) worked fine.
> 
> #include<stdio.h>
> 
> #define EXTRACTBRCKTELMNT(Terminator, Elmnt) #Elmnt, #Terminator
> 
> #define GETBRCKTELMNT(ToExtract) \

(added backslash above)

> GETELMNTEXPAND(EXTRACTBRCKTELMNT##ToExtract)
> #define GETELMNTEXPAND(a) GETELMNTEXPAND2 (a)
> #define GETELMNTEXPAND2(a, b) a, b
> 
> 
> int main (int argc, char **argv)
> { printf("%s %s\n", GETBRCKTELMNT((YYY, XXX)));
>   
>   getchar();
>   return (0);
> }

My preprocessor agree that this is incorrect code and not a
g++ bug:

Error: Invalid use of ## token pasting operator, result is not a single
preprocessing token: "EXTRACTBRCKTELMNT(" from "EXTRACTBRCKTELMNT" and
"(" gives 2 tokens; this is undefined by 16.3.3/3

-- James

Reply via email to