The general problem you are encountering in the VC++ preprocessor is that it often re-scans macro expansion when it should not be doing so according to the preprocessor rules of standard C++. I give a simple example of this in my VMD library doc.
Needless to say the VC++ preprocessor has never been a standard C++ conforming preprocessor. What's worse is that Microsoft has never provided a tool which shows what the VC++ preprocessor is actually doing when it expands a macro, but of course if it ever had it would have clearly showed the ways in which it was not C++ standard compliant, therefore embarassing Microsoft. I'm not a boost preprocessor expert, but you should give a try to /E (or /P) cl command line arguments which (at least in VS2005 :-D ) shows the pre-processed output, maybe it can give you a hint on where
the trouble is Lorenzo