On 5/7/2016 2:01 PM, Mathias Gaunard wrote:
On 9 April 2016 at 17:49, Stephan T. Lavavej
wrote: the fact we finally can write fully standards conforming C++ 14 (sans
[Niall Douglas] 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-... (e.g. without extended constexpr in the compiler, min()/max()/minmax() for initializer_list can't be constexpr)
That would be assuming that what VC 2015 Update 2 claims to support doesn't have bugs. Unfortunately, it does have significantly more bugs than Clang.
Furthermore if the preprocessor is the Clang VC++ emulated preprocessor a number of libraries will fail regression tests since the emulation is broken as far as Boost PP ( and Boost VMD ) are concerned.