November 27th, 2024

Updates for C++ developers in Visual Studio 2022 17.12

Sy Brand
C++ Developer Advocate

Visual Studio 17.12 is here and comes with a host of new features for C++ developers. We’ve made improvements across our toolchain, C++ Build Insights, Unreal Engine support, and more. This post gives a quick overview of what’s available; for all the details, see What’s New for C++ Developers in Visual Studio 2022 17.12 on the C++ blog.

Standard Library and MSVC Compiler

As always, you can find all the details about our STL work in the changelog on GitHub. Thanks to everyone who contributed changes for this release!

On the conformance side, we have finished the implementation of C++23’s P2286R8 Formatting Ranges and the multidimensional subscript operator (e.g. my_3d_span[i,j,k]). This release also comes with some new C++26 features:

  • P2997R1 Removing The Common Reference Requirement From The Indirectly Invocable Concepts
  • P0952R2 A New Specification For generate_canonical()
  • P2968R2 Make std::ignore A First-Class Object

You’ll find improvements to several debug visualizers, including those for mutex/recursive_mutex and move_iterator.

We added lifetimebound attributes to min, max, clamp, ranges::min, ranges::max, and ranges::clamp, allowing MSVC code analysis and Clang –Wdangling to detect dangling references in improper usage. See the documentation for warnings C26815 and C26816 for more information about lifetimebound annotations.

Finally, we improved the performance of several types and algorithms. The popcount() function now uses a compiler intrinsic on ARM64. We further improved the vectorized implementations of the minmax_element() and minmax() algorithm families, and optimized the search() and find_end() algorithms. We also overhauled the implementations of condition_variable and condition_variable_any, which has knock-on effects on the timed_mutex and recursive_timed_mutex types.

Set Command Line Arguments for Unreal Engine Projects

For Unreal Engine projects, you can now set the command line arguments to pass to your application directly from the toolbar. This toolbar component will show up by default if you have the Game development with C++ workload installed. If you don’t see it, you can add it by right-clicking on the toolbar and selecting Set Arguments.

Set command line arguments box (-graphicsadapter=0)

We’ll be adding support for this feature to non-UE projects in the future. See Pass command-line arguments while debugging on Microsoft Learn for documentation.

Open Folder for Unreal Engine uproject

We have added an additional entry point to open your Unreal Engine uproject with Visual Studio’s uproject support. You can now open your uproject directly from the File menu by selecting Open > Folder…. This will open your Unreal Engine project in Visual Studio.

For more information on how to use this feature, see the documentation on Microsoft Learn and our announcement blog post.

Change Signature Improvements

We have updated the Change Signature interface, allowing you to add, remove, and rearrange parameters in the parameter configuration section. Additionally, you can change their order by selecting and dragging them to a new position.

The access methods remain the same: press Ctrl+. to trigger the Quick Actions and Refactorings menu and select Change Signature. Image showing and updated method signature (bool LayoutHorizontal(const char * label, int numItems, float itemLabelSize, bool showBorders) and parapmeters

C++ Build Insights

This release of Visual Studio comes with a bunch of quality-of-life improvements for C++ Build Insights.

You can now select a few files, run Build Insights on them, and see exactly how these files impact build performance: Run Build Insights on File Selection File Selection Command in contextual menu of selected files.

You can filter results by project and file path:

File Path Filter

Note that we now truncate paths to make them easier to read.

You can designate a folder to automatically store the reports so you can easily access them during your investigation.

Setting to save traces in custom location

Finally, you can now see a short description on how each tab of Build Insights can be used, along with a link to the documentation for a detailed explanation.

Image showing the highlighted ? for Build insights

Summary

We hope this has given you a taste of what’s new. For all the details, see What’s New for C++ Developers in Visual Studio 2022 17.12 on the C++ blog.

We are very much interested in your feedback. The comments below are open. Feedback can also be shared through Visual Studio Developer Community. You can also reach us via email at visualcpp@microsoft.com.

Author

Sy Brand
C++ Developer Advocate

Sy Brand is Microsoft’s C++ Developer Advocate. Their background is in compilers and debuggers for embedded accelerators, but they’re also interested in generic library design, metaprogramming, functional-style C++, undefined behaviour, and making our communities more inclusive and welcoming.