The Visual Studio 2017 (15.7 update) is now available for download, and you should see the ‘new update available’ notification in the coming weeks–you can also get the update now by downloading the ‘free trial’ version of the installer which will let you update your system.
Compiler and CRT
|15.7 update||C++ compiler|
Note: Per this blog post, the
_MSC_VER value is now 1914 instead of 1910, 1911, 1912, or 1913.
The C/C++ Runtime (14.14.26405) is included in this update. Remember that VS 2015 and VS 2017 share the same runtime redistributable binaries and that VS 2015 Update 3 is binary compatible with VS 2017–code or static library built with one can be linked to the other–, so this is the latest version for both.
Windows 10 SDK: When installing a fresh copy of VS 2017 (15.7) the default Windows 10 SDK is now the April 2018 Update (17134). Also note that the Windows 10 SDK (17134) is once again one VS install component (
Microsoft.VisualStudio.Component.Windows10SDK.17134) instead of multiple components (
Microsoft.VisualStudio.Component.Windows10SDK.*.UWP.Native) as it was for 15063 / 16299.
C++/WinRT: With the Windows 10 SDK (17134), you no longer need to use the GitHub project or NuGet package to obtain the C++/WinRT projection headers as they are now a part of the Windows 10 SDK.
Static Analysis: The 15.7 update version of
/analyze now includes part of the C++ Core Guidelines checkers in the default native ruleset. For more details, see this blog post. The current state of the new
/analyze is quite a bit noiser than it was before, so I expect some further refinement in future releases. If you have
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet> in your project files, you’ll want to change it since that now pulls in all the C++ Core Guidelines Checker rules which is highly likely to be an overwhelming mass of new warnings.
__cpluplus: The preprocessor symbol
__cplusplus is often used in guards like
#ifdef __cplusplus to handle both C and C++ scenarios, but it also has a value that is supposed to indicate which C++ Standard the compiler conforms to. For various reasons, the Visual C++ compiler has been returning “199711” for ages. The 15.7 update includes a new compatibility switch
/Zc:__cplusplus which will cause the Visual C++ compiler to report the proper value of “201402” (or “201703” if using
/std:c++17). It is off by default because it has the potential to break a lot of code. Developers are strongly encouraged to turn on this switch and clean up their codebases for a future where this is on by default. See this blog post for more information.
Spectre mitigations: This update includes some changes to the Spectre mitigation compiler support. See this blog post for details.
GitHub: I’ve updated directx-vs-templates, DirectX Tool Kit (DX11 / DX12), DirectXTex, DirectXMesh, UVAtlas, DXUT, and FX11 for VS 2017 (15.7) support. Direct3D 12 developers should also pick up the latest version of
D3DX12.H from DirectX-Graphics-Samples