On 9 Apr 2016 at 16:49, Stephan T. Lavavej wrote:
[Niall Douglas]
the fact we finally can write fully standards conforming C++ 14 (sans preprocessor) for the MSVC target.
VC 2015 Update 2 doesn't support:
* C++98: Two-phase name lookup. * C++98: Dynamic exception specifications (deprecated in C++11, and likely to be removed in a future Standard; we don't expect to ever implement this). * C++11: Expression SFINAE support is Partial. With enough workarounds, what's supported is sufficient for result_of/function. * C++11: C99 preprocessor rules. * C++14: Extended constexpr. * C++14: NSDMIs for aggregates.
Our STL is C++14 complete and was current with N4567 (pre-Jax) - with minor exceptions as described by https://blogs.msdn.microsoft.com/vcblog/2016/01/22/vs-2015-update-2s-stl- is-c17-so-far-feature-complete/ (e.g. without extended constexpr in the compiler, min()/max()/minmax() for initializer_list can't be constexpr).
For me the big wins for using winclang with MSVC target over MSVC are (in order of priority): 1. Sometimes when MSVC gives very unhepful error messages, winclang will tell me what exactly is wrong. Sometimes it's the other way round too, either way quickly switching toolset when the errors or warnings are being ambiguous is a big time saver. 2. I can test right now my generalised constexpr paths in Windows only code rather than typing and hoping I'm right when MSVC eventually implements C++ 14 constexpr. For the rest: two phase lookup and NSDMIs for aggregates is easily worked around; the lacking preprocessor I've only ever really cursed maybe a handful of times in my career; full fat Expression SFINAE really would be very handy to have, but I can make do for now. My single biggest feature request not on the roadmap for VS2017 is the ability to parallel compile code with clang and MSVC simultaneously please with a coalesced errors and warnings view. That would be an *amazing* productivity aid. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/