{"id":26599,"date":"2020-09-14T17:30:18","date_gmt":"2020-09-14T17:30:18","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cppblog\/?p=26599"},"modified":"2020-09-15T17:23:20","modified_gmt":"2020-09-15T17:23:20","slug":"a-multitude-of-updates-in-visual-studio-2019-version-16-8-preview-3","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/a-multitude-of-updates-in-visual-studio-2019-version-16-8-preview-3\/","title":{"rendered":"A Multitude of Updates in Visual Studio 2019 version 16.8 Preview 3"},"content":{"rendered":"<p>Visual Studio 2019 version 16.8 Preview 3 comes with a huge collection of updates for C++ programmers. <a href=\"https:\/\/visualstudio.microsoft.com\/vs\/preview\/\">Download today<\/a> to try out new additions in conformance, performance, and productivity.<\/p>\n<h2>C++20<\/h2>\n<p>We\u2019ve improved support for major C++20 features across our compiler, standard library, and IDE. You can now use Modules, Concepts, Coroutines, and (some of) Ranges all in the same project!<\/p>\n<p>C++20 Coroutines are now feature-complete and available under \/std:c++latest. When using C++20 Coroutines you should include the &lt;coroutine&gt; header. Support for our legacy behaviour is available under &lt;experimental\/coroutine&gt; and the \/await switch. Read more details in our <a href=\"https:\/\/aka.ms\/cpp\/20coro\">C++20 Coroutines blogpost<\/a>.<\/p>\n<p>C++20 Modules are also feature-complete and available under \/std:c++latest. This includes header units and experimental MSBuild support which will work out your module dependencies automatically and ensure they are built in the right order. Learn more in our <a href=\"https:\/\/aka.ms\/cpp\/20modules\">C++20 Modules blogpost<\/a>.<\/p>\n<p>We now support the majority of C++20 Ranges and are working hard to complete all features. This release includes support for most of the range-based algorithms. You can track progress on <a href=\"https:\/\/github.com\/microsoft\/STL\/issues\/39\">this GitHub issue<\/a>.<\/p>\n<p>Outside of Ranges, this release brings several new STL features and optimizations. Some examples:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2018\/p0019r8.html\">std::atomic_ref&lt;T&gt;<\/a> allows you to perform atomic operations on non-atomic objects.<\/li>\n<li>Our <a href=\"http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2019\/p0811r3.html\">std::midpoint and std::lerp<\/a> implementations are now constexpr.<\/li>\n<li><a href=\"http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2019\/p1001r2.html\">std::execution::unseq<\/a> indicates that an algorithm\u2019s execution may be vectorized on a single thread.<\/li>\n<li>We\u2019ve hand-vectorized our <a href=\"https:\/\/en.cppreference.com\/w\/cpp\/algorithm\/reverse_copy\">std::reverse_copy<\/a> implementation<\/li>\n<\/ul>\n<p>You can find all the STL updates in our <a href=\"https:\/\/github.com\/microsoft\/STL\/wiki\/Changelog#expected-in-vs-2019-168-preview-3\">Changelog<\/a>.<\/p>\n<p>IntelliSense now provides support for C++20 &lt;concepts&gt; and &lt;ranges&gt; headers, and rename and browsing for concept definitions. There is a known issue that we expect to address in Preview 4.<\/p>\n<p><img decoding=\"async\" width=\"338\" height=\"241\" class=\"wp-image-26600\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-10.png\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-10.png 338w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-10-300x214.png 300w\" sizes=\"(max-width: 338px) 100vw, 338px\" \/><\/p>\n<p><a href=\"http:\/\/wg21.link\/P0848R3\">Conditionally trivial special member functions<\/a> are now supported in MSVC.<\/p>\n<h2>C11\/C17<\/h2>\n<p>All required features of C11 and C17 are now supported using the \/std:c11 and \/std:c17 switches. This includes:<\/p>\n<ul>\n<li>_Pragma<\/li>\n<li>restrict<\/li>\n<li>_Noreturn and &lt;stdnoreturn.h&gt;<\/li>\n<li>_Alignas, _Alignof and &lt;stdalign.h&gt;<\/li>\n<li>_Generic and &lt;tgmath.h&gt; support<\/li>\n<li>_Static_assert<\/li>\n<\/ul>\n<p>Note that the optional features are not supported, so we do not claim C99 compliance. Learn more in our <a href=\"https:\/\/aka.ms\/cpp\/c17\">C11\/C17 blogpost.<\/a><\/p>\n<h2>vcpkg<\/h2>\n<p><a href=\"https:\/\/github.com\/microsoft\/vcpkg\">vcpkg<\/a> now supports binary caching and manifest files.<\/p>\n<p><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">Manifests<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">\u00a0are files with the filename\u00a0<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SpellingErrorV2 SCXW46494134 BCX8\">vcpkg.json<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">\u00a0that should be present in your<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">\u00a0project directory<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">\u00a0and can easily be checked into source control. T<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">h<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">ey<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">\u00a0<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">allow you to\u00a0<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">declare your library dependencies\u00a0<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">and configured so that vcpkg is automatically run as part of a pre-build step\u00a0<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">to install missing dependencies for your active build configuration<\/span><\/span><span class=\"TextRun SCXW46494134 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46494134 BCX8\">.<\/span><\/span><\/p>\n<p>Here is an example manifest file.<\/p>\n<pre class=\"prettyprint\">{ \r\n    \"name\": \"supertux\", \r\n    \"version-string\": \"1.3.1\", \r\n    \"dependencies\": [ \r\n        \"boost-date-time\", \r\n        \"boost-filesystem\", \r\n        \"boost-format\", \r\n        \"boost-locale\", \r\n        \"boost-system\", \r\n        \"curl\", \r\n        \"freetype\", \r\n        \"glew\", \r\n        \"libogg\", \r\n        \"libvorbis\", \r\n        \"openal-soft\", \r\n        \"sdl2\", \r\n        \"sdl2-image\" \r\n    ] \r\n}<\/pre>\n<p><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun CommentStart SCXW191810199 BCX8\">Binary caching<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">\u00a0<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">saves copies of your\u00a0<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">binaries<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">\u00a0<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">when<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">\u00a0the<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">y are compiled for the first time by vcpkg.\u00a0<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">The cache location can be set anywhere from your\u00a0<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">local filesystem<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">\u00a0to a\u00a0<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">remote\u00a0<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SpellingErrorV2 SCXW191810199 BCX8\">fileshare<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">\u00a0or<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">\u00a0artifact storage\u00a0<\/span><\/span><span class=\"TextRun SCXW191810199 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW191810199 BCX8\">location.\u00a0<\/span><\/span><\/p>\n<p>You can read more about the new features, including experimental features such as versioning and registries, in our <a href=\"https:\/\/aka.ms\/vcpkg\/team\">vcpkg announcements blogpost<\/a>.<\/p>\n<h2>CMake and Linux<\/h2>\n<p>We have upgraded the version of CMake shipped with Visual Studio to CMake 3.18. This will enable you to use their new CMake profiling feature, and more. Read more in <a href=\"https:\/\/cmake.org\/cmake\/help\/latest\/release\/3.18.html\">their release notes<\/a>.<\/p>\n<p>You can now debug Linux core dumps on a remote Linux system or WSL directly from Visual Studio. This may be helpful if you run a \u201cWindows shop\u201d but deploy to Linux servers and want to diagnose crashes in a familiar environment.<\/p>\n<p><img decoding=\"async\" width=\"548\" height=\"282\" class=\"wp-image-26601\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-11.png\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-11.png 548w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-11-300x154.png 300w\" sizes=\"(max-width: 548px) 100vw, 548px\" \/><\/p>\n<p>We\u2019ve improved our error reporting for missing build tools on Linux projects. Previously you would encounter a lot of errors when compiling, debugging, or using IntelliSense. Now you get a warning in the toolbar and a clear error telling you about the missing tools in the error view.<\/p>\n<p><img decoding=\"async\" width=\"442\" height=\"32\" class=\"wp-image-26603\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-13.png\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-13.png 442w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-13-300x22.png 300w\" sizes=\"(max-width: 442px) 100vw, 442px\" \/><\/p>\n<p><img decoding=\"async\" width=\"264\" height=\"25\" class=\"wp-image-26604\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-14.png\" \/><\/p>\n<h2>Productivity<\/h2>\n<p>New warnings and quick-fixes based on an IntelliSense-driven code linter are now available in the editor. You can configure it in Tools-&gt;Options-&gt;Text Editor-&gt;C\/C++-&gt;CodeStyle-&gt;Linter + Fixups. You&#8217;ll be able to get warnings and fixes for arithmetic overflow, uninitialized local variables, converting the result of an integer division to float, and more!<\/p>\n<p><img decoding=\"async\" width=\"602\" height=\"128\" class=\"wp-image-26602\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-12.png\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-12.png 602w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/09\/word-image-12-300x64.png 300w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/p>\n<h2>Code Analysis<\/h2>\n<p>Our code analysis tools now support the SARIF 2.1 standard: the industry standard static analysis log format. Behind the scenes, SARIF 2.1 powers the MSVC code analysis experience in Visual Studio, including error list population in both regular and background code analysis runs, green squiggles and fix-its. In the near future, we plan to improve the IDE experience further by color coding the squiggles according to severity level (Info\/Warning\/Error) of each defect based on information in the SARIF logs. You can read more about the format SARIF format in <a href=\"https:\/\/docs.oasis-open.org\/sarif\/sarif\/v2.1.0\/sarif-v2.1.0.html\">the official specification<\/a>.<\/p>\n<p>Download\u202f<a href=\"https:\/\/visualstudio.microsoft.com\/vs\/preview\/\">Visual Studio 2019 version 16.8 Preview 3<\/a>\u00a0today and give it a try.\u00a0We would\u00a0love to hear from you to help us prioritize and build the right features for you. We can be reached via the comments below,\u202f<a href=\"https:\/\/developercommunity.visualstudio.com\/spaces\/8\/index.html\">Developer Community<\/a>,\u202fand Twitter (<a href=\"https:\/\/twitter.com\/visualc\">@VisualC<\/a>). The best way to file a bug or suggest a feature is via Developer Community.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Visual Studio 2019 version 16.8 Preview 3 comes with a huge collection of updates for C++ programmers. Download today to try out new additions in conformance, performance, and productivity. C++20 We\u2019ve improved support for major C++20 features across our compiler, standard library, and IDE. You can now use Modules, Concepts, Coroutines, and (some of) Ranges [&hellip;]<\/p>\n","protected":false},"author":706,"featured_media":26600,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[270],"tags":[],"class_list":["post-26599","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-announcement"],"acf":[],"blog_post_summary":"<p>Visual Studio 2019 version 16.8 Preview 3 comes with a huge collection of updates for C++ programmers. Download today to try out new additions in conformance, performance, and productivity. C++20 We\u2019ve improved support for major C++20 features across our compiler, standard library, and IDE. You can now use Modules, Concepts, Coroutines, and (some of) Ranges [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/26599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/706"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=26599"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/26599\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/26600"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=26599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=26599"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=26599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}