Visual Studio 2019 seems to have good support for C++17. Unfortunately, it seems binaries built with it require the Universal CRT to be installed on the target machine, and the minimum supported OS for the UCRT is Vista.
So, if I want to build a binary to target Windows XP, must I use a VS C++ compiler preceding the UCRT? Is that VS 2013, which has some support for C++11?
The latest toolset that has Windows XP support is v141_xp, that is the XP toolset from Visual Studio 2017. It has full C++14 support, and partial C++17 support. It comes with Visual Studio 2019, too:
Unfortunately, it does not have full C++17 and C++20 support.
The latest update of VS2019 has almost complete C++20 support in v142 toolset, and there is an update expected to make it complete, but it is without XP support.
VS2022 drops Vista and support some C++23 in its v143 toolset. It still ships with v141_xp toolset as optional [deprecated] component.
The v141_xp toolset still has the support of C++14, and partial C++17. It mostly corresponds to the Conformance table where they mention VS 2017. (Say, you will have std::any
or terse static_assert
, but won't be able to use shared_mutex
, as it relies on Vista SRWLOCK)
See also: How to install build tools for v141_xp for VC 2017?