We are happy to announce that Visual Studio 2022 version 17.5 is now generally available! This post summarizes the new features you can find in this release for C++. See the Visual Studio 17.5 announcement to learn about all of the features in the release. You can download Visual Studio 2022 from the Visual Studio downloads page or upgrade your existing installation by following the
Contents
Arm64
In 17.3 you could use Visual Studio as a native Arm64 application. In 17.4 you could use our native Arm64 toolchain in production. Continuing our progress, in 17.5 you can now obtain a native Arm64 Clang toolset with our LLVM workload!
Productivity and Game Development
Build Performance
One of our highest voted Developer Community tickets was regarding the runtime overhead of functions like std::move and std::forward in debug builds. In 17.5 we addressed this issue, making these cast-like functions never produce function calls in generated code, even in debug mode. Depending on your projects, this could noticeably improve performance of your debug builds. This feature is supported by a new attribute, [[msvc::intrinsic]]. It can be applied to non-recursive functions consisting of a single cast, which take only one parameter. You can read more about these changes in Improving the State of Debug Performance in C++.
Developer Productivity
This section used to say that Brace Pair Colorization and Spell Check were available in this release. Unfortunately these are being delayed until 17.6. You can try them out in 17.6 Preview 1 which is now available.
17.5 comes with a host of new productivity features, which are outlined below, and you can learn more about them in C++ Brace Pair Colorization and More in Visual Studio.
Reimagined Member List is a new experimental feature which puts the members whose types match the current context you are in at the top of the list for easy access. This is currently being rolled out to a subset of users, and we will be exploring this space further in future releases, evaluating more criteria for promoting items to the top of the list.
When you hover over a macro, the expanded macro gets displayed in a pop-up. With new formatting and a monospaced font you’ll be able to read the expanded macro much easier. You will also have two new options: to copy the expanded macro to your clipboard, and to replace the macro invocation with its expansion.
Visual Studio now has a Spell Checker that helps in making your spelling accurate. This feature checks the spelling of all words inside comments, and names on declarations will be checked by separating camelCase and underscored words. Using quick actions you can then easily select a replacement, or choose to ignore the spelling issue, adding the word to your personal dictionary.
Unreal Engine
You can now view properties from base classes modified in an Unreal Blueprint asset without leaving Visual Studio. Double-click in a Blueprint reference for a C++ class or property to open the UE Asset Inspector.
Code Safety
If you want less noise when using the Lifetime Checker, you can use the new high-confidence versions of the existing warnings. As of 17.5, the high-confidence warnings are still experimental, but depending on the feedback we might include them in some of the recommended profiles in future versions. You can learn more in High-confidence Lifetime Checks in Visual Studio version 17.5 Preview 2.
Standards Conformance
C++23
We’re continuing our work on standards conformance for C++23, giving you several new standard library features to try out.
std::ranges::fold_left
, fold_right
and friends define fold operations, similar to std::accumulate
, but more general. For example:
std::vector<double> v = {0.25, 0.75};
auto sum = ranges::fold_left(v, 0, std::plus());
std::views::zip
is a range adaptor for “zipping” together multiple ranges, with the Nth element being a tuple of the Nth elements of all the supplied ranges. For example:
std::vector<std::string> cats { "marshmallow", "milkshake", "lexical cat" };
std::vector<int> ages { 4, 4, 6 };
// {{"marshmallow", 4}, {"milkshake", 4}, {"lexical cat", 6}}
std::views::zip(cats, ages)
std::format_string
provides a way to take a compile-time checked format string as a function argument. For example:
template <typename... Args>
void log(std::format_string<Args...> s, Args&&... args) {
if (logging_enabled) {
log_raw(std::format(s, std::forward<Args>(args)...));
}
}
log("cat {} is {} years old", cat.name(), cat.age());
For more details on what is new and upcoming in the standard library, check out our changelog on GitHub.
C11
We’re also expanding our C11 optional feature support. You can now use an experimental implementation of C11 atomic primitives (<stdatomic.h>) with the /experimental:c11atomics
flag in /std:c11
mode or later. You can learn more in C11 Atomics in Visual Studio 2022 version 17.5 Preview 2.
Cross Platform & Embedded
Linux
If you are targeting Linux platforms, you can now interact with remote processes with full terminal I/O with the Visual Studio Integrated Terminal. This lets you debug interactive terminal applications with ease, all from within Visual Studio. Learn more at Debug Linux Console apps in Visual Studio’s Integrated Terminal.
Embedded
Concurrent monitoring is now supported in the Serial Monitor. This allows you to monitor multiple ports at the same time, side by side! Press the “Open an additional monitor” button to get started.
CMake
If you have multiple CMake targets in one project, you can now select multiple targets to build from the CMake Targets view. Use Ctrl+Click or Shift+Click to select the set of targets you want to build, right click on one of them, and select “Build Selection” to build them all.
CMakePresets.json gives you a standard way to express your CMake build configurations which you can easily check in to source control. You can now use CMakePresets.json version 5 in Visual Studio. See the CMake documentation for information on new features.
If you have large test suites, you may want to make the most of all of your hardware to run them as fast as possible. To support this, Test Explorer can now build and test multiple CMake targets in parallel. Enable this with the “Run Tests in Parallel” option.
Developer Containers
For those of you using Developer Containers, you are now able to run them on a remote Linux Machine, and to open a terminal window into the currently running Developer Container.
Send us your feedback
We are very much interested in your feedback to continue to improve this experience. The comments below are open. Feedback can also be shared through the Developer Community. You can also reach us on Twitter (@VisualC), or via email at visualcpp@microsoft.com.
Hello. A quick question: Does Visual Studio 2022 build 17.5 provide an AddressSanitizer that can log errors at runtime and keep going (rather than quit after the first error)? I recall reading somewhere that ASAN would offer this in the 17.5 general release, but I see no mention of it here or in the release announcement.