
Perhaps I was not clear, plus the ## operator is a trickster. Let's try this: you can prove to yourself that the ## operators are having no effect (and are therefore unnecessary) with this sample program below. Compile and run it both with and without the patch. You will see no change in the behavior. #include <stdio.h> #include "stringize.hpp" int main() { puts(BOOST_PP_STRINGIZE(x)); return 0; } So beyond being unnecessary, let me again attempt to convince you that the ## operators are also wrong and therefore undesirable. First let me explain my motivation. Our tool issues a warning when our end user compiles this file with our code coverage tool together with Microsoft C++. The reason for the warning is a long story, but we need it. Other than the warning, our behavior with the ## operator is exactly the same as Microsoft C++. Sometimes end users turn on the option that says all warnings are errors, and then their build fails. So we don't want to bother the end user with something they have no control over. Anyway, let's look closely at this line: # define BOOST_PP_STRINGIZE_A(arg) BOOST_PP_STRINGIZE_B ## (arg) In BOOST_PP_STRINGIZE_A there is an attempt to join "BOOST_PP_STRINGIZE_B" with "(" that would result in a single token "BOOST_PP_STRINGIZE_B(". That does not make sense, this is clearly two separate tokens, an identifier and a '('. The ## is not really accomplishing anything here. The only effect of ## here is to make this macro behavior undefined by the C and C++ standards. The problem is just a little harder to see in BOOST_PP_STRINGIZE_B: # define BOOST_PP_STRINGIZE_B(arg) BOOST_PP_STRINGIZE_I ## arg In this case, the argument "arg" is always passed in from BOOST_PP_STRINGIZE and it always begins with "(". But after that, it is the same story as before, you cannot join an identifier with a '('. So I hope you see more clearly what is happening now. By the way, when I compile the whole boost library with our tool, I see the warning about ## producing invalid results only here in stringize.hpp. Regards, Steve Cornett