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
#define BOOST_PP_VARIADICS_MSVC 0
#include
#include
int main()
{
namespace mpl = boost::mpl;
using L = mpl::list<>;
using L2 = mpl::push_front;
}
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.