Daniel Frey wrote:
Concatenating two tokens with the '##' operator, where the result isn't a new valid token results in undefined behaviour. In your sample it yields '>>', which is a valid token, so it is well defined. In other contexts two consecutive '>' characters are always interpreted as '>>' and not as two single '>'.
That wasn't my point :)
But this isn't the point here. The '>>' was not formend by a '##' operator but by plain consecutiveness:
#define SOME_MACRO(T) <T> SOME_MACRO(some_class<...>) // expands to <some_class<...>>
Exactly. But the expanded <some_class<...>> is the result of the preprocessor, so IIRC the two >'s are treated as two tokens, not as one, because they weren't glued together with ##. Also, the GCC preprocessor expands the above to
< some_class<...> >
and I'm pretty sure that the rules for inserting spaces are exactly defined and there is not much room for interpretation. If the GCC is correct to insert spaces, then the patch is a work-around for a compiler (here: preprocessor) bug. So, what is the correct behaviour here?
Regards, Daniel
-- Daniel Frey
aixigo AG - financial training, research and technology Schloß-Rahe-Straße 15, 52072 Aachen, Germany fon: +49 (0)241 936737-42, fax: +49 (0)241 936737-99 eMail: [EMAIL PROTECTED], web: http://www.aixigo.de
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost