clang 'emulating' VC++ on Windows predefined macros

There is a build of clang which 'emulates' VC++ including the non-standard VC++ preprocessor. How can I tell, via preprocessor defines, when this occurs in preprocessor code ?

I am the author of Boost VMD and a maintainer of Boost PP and I need to set internal macros in both, when the non-standard VC++ preprocessor is being used, so that the VC++ workarounds which allow both libraries to work with VC++ are in effect.

Both clang and _MSC_VER would be defined for clang-cl. In this mode you are more likely to use clang or gcc-compatible features rather than the VC bugs/workarounds, not all of which are emulated by clang-cl.

Some examples from the last time I tried using Boost with clang-cl :

https://svn.boost.org/trac/boost/ticket/11821

https://svn.boost.org/trac/boost/ticket/11832

Both __clang__ and _MSC_VER would be defined for clang-cl. In this mode
you are more likely to use clang or gcc-compatible features rather than
the VC bugs/workarounds, not all of which are emulated by clang-cl.

To what is _MSC_VER set when clang-cl is used ?

Does clang when using the -fms-compatibility or -fms-extensions flags implement the 'emulated' VC++ non-standard preprocessor ? If so are both __clang__ and _MSC_VER defined when that happens ?

For my purposes I am only concerned with detecting, at preprocessing time, clang 'emulating' the non-standard VC++ preprocessor. I understand that there are other C++ issues in this emulation of VC++, such as those you have reported below.

Both __clang__ and _MSC_VER would be defined for clang-cl. In this mode
you are more likely to use clang or gcc-compatible features rather than
the VC bugs/workarounds, not all of which are emulated by clang-cl.

To what is _MSC_VER set when clang-cl is used ?

It can be controlled with -fms-compatibility-version, which currently
defaults to 1800.

~Aaron