Edward Diener wrote:
There is also BOOST_PP_VARIADICS_MSVC, which provides lots of special VC++ variadics workarounds.
Yes there was, thanks for the hint. #define BOOST_PP_CONFIG_FLAGS() 1 #include <boost/preprocessor/config/config.hpp> #define BOOST_PP_VARIADICS_MSVC 0 #include <boost/mpl/list.hpp> #include <boost/mpl/push_front.hpp> int main() { namespace mpl = boost::mpl; using L = mpl::list<>; using L2 = mpl::push_front<L, void>; } works. The reason is # elif defined _MSC_VER && _MSC_VER >= 1400 && (defined(__clang__) || !defined __EDG__ || defined(__INTELLISENSE__) || defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1700) # define BOOST_PP_VARIADICS 1 # undef BOOST_PP_VARIADICS_MSVC # define BOOST_PP_VARIADICS_MSVC 1 which defines BOOST_PP_VARIADICS_MSVC for Clang and must not. You can tell Clang to not define _MSC_VER (-fmsc-version="0"), but MS's headers don't work with that yet (although STL said they are going to.) -fno-ms-compatibility is default for Clang/C2 at least, so I think that the above should just define BOOST_PP_VARIADICS_MSVC to 0 on Clang.