
On Sun, Oct 14, 2012 at 4:32 AM, Lorenzo Caminiti <lorcaminiti@gmail.com>wrote:
Boost.Preprocessor should already impl most of the workarounds needed. Some other workarounds (not too many) will be needed in Boost.Generic for empty (e.g., ( void ) instead of ( ) ) and to ensure proper macro expansion order (usually PP_EXPAND or similar but re-impl because of reentrancy). That's at least my experience with supporting both MSVC and GCC for Boost.Contract.
At the time I wrote most of Boost.Generic, the variadic extensions to Boost.Preprocessor didn't exist and neither did the variadic macro data library in the sandbox, so I had to make most of the facilities from scratch. Supporting MSVC with my hand-rolled macros was secondary to getting something standard-compliant working (which is a big feat on its own). This is unfortunate because again, a large number of users have to use
MSVC... what were the MSVC issues that caused the Boost.Generic concept emulation code not to work (pp a side)?
Off-hand, here are some of the features I require, not including a compliant preprocessor (I believe VC++ supports many of these now): the extended sfinae rules variadic templates template aliases relaxed typename rule rvalue references static_assert decltype default template arguments for function templates template aliases compliant <type_traits> compliant <utility> -- -Matt Calabrese