The following code gives the error message in Synopsis. This is part of a header file #define CACHE(a) if (a##X == tau) return a##Y; a##X = tau; return a##Y = (*a##)(tau) inline double Cosmos::tau2a(const double tau) { CACHE(Tau2A); } gcc-2.95 didn't report any warning. The code generated by the pre-processor is perfectly fine. The warning is unnerving. Thanks! Release: Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --enable-languages=c,c++,f77,objc,java,ada --enable-libgcj --with-gxx-i Environment: SusE Linux 8.1 , kernel 2.4.19 How-To-Repeat: Is part of a rather larger build. I'll include the archive. But looking at the code in the description is propably much more easy.
State-Changed-From-To: open->closed State-Changed-Why: The warning is perfectly legal. The result of a ## operator must be a valid preprocessor token. You are trying to paste the string tau2 with a closing parenthesis and the result isn't a preprocessor token. Remove the ## operator after *a to get rid of the warning.