On 3/25/2017 10:46 AM, Peter Dimov via Boost wrote:
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.
I am well aware of what is in config.hpp and why.
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.
My problem is that I do not know what -fno-ms-compatibility sets as predefined macros. I suppose I can test it and then try to adjust config.hpp accordingly but I hate doing something when there is no documentation and things can change anytime clang, or is it Microsoft with Clang/C2, gets it in their head to change things again. I do not even know what -fno-ms-compatibility does as far as the preprocessor is concerned; does this mean we are back to clang's normal C++ standard preprocessor as in clang for Linux or clang for Windows targeting mingw(-64)/gcc ? I know I am being unreasonably stubborn but I absolutely hate it when clang or a Microsoft refuses to document something and then expects everyone to jump through hoops trying to figure out what they have done and/or react to what they decide to do next. My guess, through some unofficial blogs, is that -fno-ms-compatibility sets __clang__, _MSC_VER, and __GNUC__ to various values. I can test this with various releases of clang and the clang-win toolset, but I have no idea even how to invoke clang/C2 in VS2015/VS2017, since there is no documentation about clang/C2 in the former and there is no documentation for anything in the latter.