<rant>
How positively delightful to wait 24 hours and get a non-response like this. This is like pulling blood out of a stone. At this point, I'll
Sorry for your frustrations, but imagine the frustration of the library author after yet another bizarre compiler error on perfectly standard C++. Anyway, I think the answer was in the previous mail: Portability. In an ideal world most of this sort of macro hackery wouldn't exist. Unfortunately, boost exists in the real world...
just forget it and use something else. I do understand that Boost users tend to be extremely advanced C++ users. For the record, I have been programming in C++ for well over 10 years and still get confused at some of the things you do. I am questioning and not understanding your approach at all. Why? Well, lets look at Stroustrup, 3rd edition page 160 "Macros are important in C, but have far fewer uses in C++. The first rule about macros is: Don't use them if you don't have to. Almost every macro demonstrates a flaw in the program, or the programmer." Then "avoid macros." Now, I'm sure I'm missing your good reason but there you go. To me, macros are an ugly legacy from C and render C++ code unreadable and maintainable. So, how detailed does my question have to be? I don't understand the whole approach and why it was taken. Is that clear enough?
This viewpoint is just fine if you are creating a library for one platform and compiler. The reality of the current world is that many supposedly standard features of C++ or parts of the standard library are not correct on many of the most common compilers. As a result, if you write a library 'to the standard' it might not get used much since it won't compile or work correctly for most people. In addition, many boost libraries push compilers to the limits and thus for some boost libraries the situation is even more severe. The result is that many boost libraries use various macro techniques to create portable code. Looking ahead a few years most of this will hopefully disappear. HTH, Jeff