<snip>
The name of a macro is _MSC_VER, not __MSVC_VER. With MSC+Clang
_MSC_VER, __clang__ and BOOST_CLANG are defined after inclusion of
Boost.Config.
When I compile the Boost.Geometry Quick Start example with MSC+Clang
I only get errors in other libraries, i.e. TypeOf and TypeTraits
(master branch). I'm still going to replace _MSC_VER checks in
Geometry with BOOST_MSVC checks but this will not fix the issues you
have.
Side note: If you'd like to have this platform fully supported the
best way would be to run the regression tests so the maintainers of
all liberaries would be able to see the errors. Or you could try to
convince people already running the tests on Windows to add one more
compiler.
Boost.TypeOf
https://github.com/boostorg/typeof/blob/boost-1.60.0/include/boost/typeof/msvc/typeof_impl.hpp#L150
This code is enabled when BOOST_MSVC is NOT defined or version is
lesser than 1300.
And the file is included if _MSC_VER is defined:
https://github.com/boostorg/typeof/blob/boost-1.60.0/include/boost/typeof/typeof.hpp#L102
If BOOST_MSVC is checked instead then the code compiles but then
BOOST_TYPEOF_EMULATION is defined and I'm guessing this is not
correct. With Clang probably native __typeof__ should be used. So
either BOOST_CLANG/__clang__ should be checked here as a special
case with _MSC_VER or it should be checked above as a standalone
case, or together with __GNUC__. What would be prefered?
Boost.TypeTraits
1>D:\lib\modular-boost\boost/type_traits/has_nothrow_assign.hpp(64,7):
error : no template named 'is_assignable'; did you mean
'std::is_assignable'?
1> BOOST_HAS_NOTHROW_ASSIGN(T)
1> ^
1> D:\lib\modular-boost\boost/type_traits/intrinsics.hpp(199,96)
: note: expanded from macro 'BOOST_HAS_NOTHROW_ASSIGN'
1> # define BOOST_HAS_NOTHROW_ASSIGN(T)
(__has_nothrow_assign(T) && !is_volatile<T>::value
&& is_assignable<T&, const T&>::value)
1>
^
1> C:\Program Files (x86)\Microsoft Visual Studio
14.0\VC\include\type_traits(577,9) : note: 'std::is_assignable'
declared here
1> struct is_assignable
1> ^
1>D:\lib\modular-boost\boost/type_traits/has_nothrow_constructor.hpp(26,84):
error : no template named 'is_default_constructible'; did you mean
'std::is_default_constructible'?
1> template <class T> struct has_nothrow_constructor :
public integral_constant<bool,
BOOST_HAS_NOTHROW_CONSTRUCTOR(T)>{};
1>
^
1> D:\lib\modular-boost\boost/type_traits/intrinsics.hpp(193,80)
: note: expanded from macro 'BOOST_HAS_NOTHROW_CONSTRUCTOR'
1> # define BOOST_HAS_NOTHROW_CONSTRUCTOR(T)
(__has_nothrow_constructor(T) &&
is_default_constructible<T>::value)
1>
^
1> C:\Program Files (x86)\Microsoft Visual Studio
14.0\VC\include\type_traits(539,9) : note:
'std::is_default_constructible' declared here
1> struct is_default_constructible
1> ^
I'm guessing that more type traits suffer from this.
Regards,
Adam
P.S. In both cases you could create a pull request with proposed
change on GitHub or create a ticket:
https://svn.boost.org/trac/boost/newticket if maintainers of those
libraries didn't answer here.