{"id":33593,"date":"2024-02-12T16:45:29","date_gmt":"2024-02-12T16:45:29","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cppblog\/?p=33593"},"modified":"2024-02-13T22:56:47","modified_gmt":"2024-02-13T22:56:47","slug":"a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg\/","title":{"rendered":"A Year of C++ Improvements in Visual Studio, VS Code, and vcpkg"},"content":{"rendered":"<p>As we enter the new year, it\u2019s a good time to look back at all the features and improvements we made for C++ developers in our tools in 2023. We\u2019ve made advancements across Visual Studio, Visual Studio Code, our toolchain, and the vcpkg package manager in both performance and functionality. Some particular areas of focus have been ARM64 support, Unreal Engine development, code safety, and cross-platform development.<\/p>\n<h2>Contents<\/h2>\n<table style=\"border-collapse: collapse; width: 100%; height: 465px;\">\n<tbody>\n<tr style=\"height: 197px;\">\n<td style=\"width: 50%; height: 197px;\"><a href=\"#cross-platform\">Cross-Platform<\/a><\/td>\n<td style=\"width: 50%; height: 197px;\">\n<ul>\n<li><a href=\"#integrated-linux-terminal\">Integrated Linux Terminal<\/a><\/li>\n<li><a href=\"#multi-cmake\">Test and Build Multiple CMake Targets<\/a><\/li>\n<li><a href=\"#cmake-debugger\">CMake Debugger<\/a><\/li>\n<li><a href=\"#remote-file-explorer\">Remote File Explorer<\/a><\/li>\n<li><a href=\"#stm32\">STM32CubeIDE Project Support<\/a><\/li>\n<li><a href=\"#wsl-for-me\">Automatic WSL Installation<\/a><\/li>\n<li><a href=\"#remote-linux-unit-test\">Remote Linux Unit Test Support<\/a><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 50%; height: 28px;\"><a href=\"#productivity\">Productivity<\/a><\/td>\n<td style=\"width: 50%; height: 28px;\">\n<ul>\n<li><a href=\"#sticky-scroll\">Sticky Scroll<\/a><\/li>\n<li><a href=\"#brace-pair-colorization\">Brace Pair Colorization<\/a><\/li>\n<li><a href=\"#spell-checker\">Spell Checker<\/a><\/li>\n<li><a href=\"#all-in-one-search\">All-in-one Search<\/a><\/li>\n<li><a href=\"#breakpoint-groups\">Breakpoint Groups<\/a><\/li>\n<li><a href=\"#file-comparison-window\">File Comparison Window<\/a><\/li>\n<li><a href=\"#copy-paste\">Copy-paste with Correct Indentation<\/a><\/li>\n<li><a href=\"#parallel-stack-filtering\">Parallel Stack Filtering<\/a><\/li>\n<li><a href=\"#doxygen\">Doxygen for Overloaded Functions<\/a><\/li>\n<li><a href=\"#macro-expansion-visualization\">Macro Expansion Visualization<\/a><\/li>\n<li><a href=\"#github-pr\">Create GitHub Pull Request from Visual Studio<\/a><\/li>\n<li><a href=\"#structured-diagnostics\">Structured Diagnostics<\/a><\/li>\n<li><a href=\"#size-and-alignment\">Size and Alignment of Types<\/a><\/li>\n<li><a href=\"#memory-layout\">Memory Layout Visualization<\/a><\/li>\n<li><a href=\"#include-cleanup\">Include Cleanup<\/a><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 50%; height: 28px;\"><a href=\"#game-development\">Game Development<\/a><\/td>\n<td style=\"width: 50%; height: 28px;\">\n<ul>\n<li><a href=\"#ue-blueprint\">Unreal Engine Blueprint References and Asset Inspector<\/a><\/li>\n<li><a href=\"#ue-log\">Unreal Engine Log Viewer<\/a><\/li>\n<li><a href=\"#hlsl\">HLSL Support<\/a><\/li>\n<li><a href=\"#ue-macro\">Unreal Engine Macro Formatting<\/a><\/li>\n<li><a href=\"#ue-naming\">Unreal Engine Naming Convention Checker<\/a><\/li>\n<li><a href=\"#ue-blueprint-find\">Unreal Engine Blueprint Find All References<\/a><\/li>\n<li><a href=\"#ue-test\">Unreal Engine Test Adapter<\/a><\/li>\n<li><a href=\"#ue-snippets\">Unreal Engine Code Snippets<\/a><\/li>\n<li><a href=\"#ue-macro-suggestions\">Unreal Engine Macro Specifier Suggestions<\/a><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 50%; height: 28px;\"><a href=\"#build-insights\">Build Insights<\/a><\/td>\n<td style=\"width: 50%; height: 28px;\"><a href=\"#build-insights\">Build Insights<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 50%; height: 28px;\"><a href=\"#ide-performance\">Visual Studio IDE Performance<\/a><\/td>\n<td style=\"width: 50%; height: 28px;\"><a href=\"#ide-performance\">IDE Performance<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 50%; height: 28px;\"><a href=\"#toolchain\">Toolchain<\/a><\/td>\n<td style=\"width: 50%; height: 28px;\">\n<ul>\n<li><a href=\"#conformance\">Conformance<\/a><\/li>\n<li><a href=\"#code-performance\">Code Performance<\/a><\/li>\n<li><a href=\"#code-safety\">Code Safety<\/a><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 50%; height: 28px;\"><a href=\"#vcpkg\">vcpkg<\/a><\/td>\n<td style=\"width: 50%; height: 28px;\"><a href=\"#vcpkg\">vcpkg<\/a><\/td>\n<\/tr>\n<tr style=\"height: 44px;\">\n<td style=\"width: 50%; height: 44px;\"><a href=\"#cpp-extension\">Visual Studio Code C++ Extension<\/a><\/td>\n<td style=\"width: 50%; height: 44px;\">\n<ul>\n<li><a href=\"#missing-header\">Missing Header File Quick Fix<\/a><\/li>\n<li><a href=\"#call-hierarchy\">Call Hierarchy View<\/a><\/li>\n<li><a href=\"#extract-code\">Extract Code to Function<\/a><\/li>\n<li><a href=\"#compiler-acquisition\">New Compiler Acquisition Process<\/a><\/li>\n<li><a href=\"#create-declaration-definition\">Create Declaration\/Definition<\/a><\/li>\n<li><a href=\"#copy-declaration-definition\">Copy Function Declaration\/Definition<\/a><\/li>\n<li><a href=\"#markdown-comments\">Markdown Comment Formatting<\/a><\/li>\n<li><a href=\"#looking-forward\">Looking Forward<\/a><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 50%; height: 28px;\"><a href=\"#cmake-extension\">Visual Studio Code CMake Extension<\/a><\/td>\n<td style=\"width: 50%; height: 28px;\">\n<ul>\n<li><a href=\"#test-explorer\">Test Explorer<\/a><\/li>\n<li><a href=\"#vcpkg-portfile-debugging\">vcpkg Portfile Debugging<\/a><\/li>\n<li><a href=\"#cmake-status-bar\">Simplified CMake Status Bar<\/a><\/li>\n<li><a href=\"#vscode-cmake-debugger\">CMake Debugger<\/a><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 50%; height: 28px;\"><a href=\"#conference-talks\">Conference Talks<\/a><\/td>\n<td style=\"width: 50%; height: 28px;\"><a href=\"#conference-talks\">Conference Talks<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Visual Studio<\/h2>\n<h2><a id=\"cross-platform\"><\/a>Cross-Platform<\/h2>\n<p>Cross-platform development is a first-class citizen in Visual Studio and has been for many years now. We\u2019ve added many new features for those targeting Linux, <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/wsl\/about\">Windows Subsystem for Linux<\/a>, embedded platforms, and those using CMake for their builds.<\/p>\n<h3><a id=\"integrated-linux-terminal\"><\/a>Integrated Linux Terminal<\/h3>\n<ul>\n<li>The <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/debug-linux-console-apps-in-visual-studios-integrated-terminal\/\">Linux Integrated Terminal<\/a> allows you to debug Linux applications with a fully-featured terminal experience directly inside Visual Studio.<\/li>\n<\/ul>\n<p><img decoding=\"async\" width=\"1706\" height=\"1080\" class=\"wp-image-33594\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/linux-console-output-appearing-in-visual-studio-te.gif\" alt=\"Linux console output appearing in Visual Studio terminal window\" \/><\/p>\n<h3><a id=\"multi-cmake\"><\/a>Test and Build Multiple CMake Targets<\/h3>\n<p>You can now test and build multiple CMake Targets from the CMake Targets view.<\/p>\n<p><img decoding=\"async\" width=\"940\" height=\"360\" class=\"wp-image-33595\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical.png\" alt=\"A screenshot of a computer Description automatically generated with medium confidence\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical.png 940w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-300x115.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-768x294.png 768w\" sizes=\"(max-width: 940px) 100vw, 940px\" \/><\/p>\n<h3><a id=\"cmake-debugger\"><\/a>CMake Debugger<\/h3>\n<p>Use the <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/cmake-debugger-allows-you-to-debug-your-cmake-scripts-and-more\/\">CMake Debugger<\/a> to debug your CMake scripts like you would any other program. You can set breakpoints, see the values of CMake variables at the current point of execution, and more.<\/p>\n<p><img decoding=\"async\" width=\"846\" height=\"478\" class=\"wp-image-33596\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/screenshot-of-visual-studio-in-a-debugging-session.png\" alt=\"Screenshot of Visual Studio in a debugging session showing an exception dialog that originated from a CMake script \" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/screenshot-of-visual-studio-in-a-debugging-session.png 846w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/screenshot-of-visual-studio-in-a-debugging-session-300x170.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/screenshot-of-visual-studio-in-a-debugging-session-768x434.png 768w\" sizes=\"(max-width: 846px) 100vw, 846px\" \/><\/p>\n<h3><a id=\"remote-file-explorer\"><\/a>Remote File Explorer<\/h3>\n<p>Use the <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/view-files-on-your-remote-machines-using-the-new-remote-file-explorer-in-visual-studio\/\">Remote File Explorer<\/a> to see a directory tree of the files on a remote system.<\/p>\n<p><img decoding=\"async\" width=\"660\" height=\"466\" class=\"wp-image-33597\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-remote-file-explorer-lets-you-view-your-files.png\" alt=\"The Remote File Explorer lets you view your files on your remote machines\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-remote-file-explorer-lets-you-view-your-files.png 660w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-remote-file-explorer-lets-you-view-your-files-300x212.png 300w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/p>\n<h3><a id=\"stm32\"><\/a>STM32CubeIDE Project Support<\/h3>\n<p>Import STM32CubeIDE projects with the new\u00a0<a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/importing-st-projects-into-visual-studio\/\">STM32CubeIDE Project Support<\/a>.<\/p>\n<p><a class=\"lightbox-link\" href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/01\/file-menu-entry-for-import-stm32cubeide-project-op.png\" aria-label=\"Lightbox image, click or press enter to enlarge\" data-featherlight=\"image\"><img decoding=\"async\" class=\"wp-image-246866\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/01\/file-menu-entry-for-import-stm32cubeide-project-op.png\" sizes=\"(max-width: 444px) 100vw, 444px\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/01\/file-menu-entry-for-import-stm32cubeide-project-op.png 444w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/01\/file-menu-entry-for-import-stm32cubeide-project-op-300x124.png 300w\" alt=\"File menu entry for Import STM32CubeIDE project option\" width=\"444\" height=\"183\" \/><\/a><\/p>\n<h3><a id=\"wsl-for-me\"><\/a>Automatic Windows Subsystem for Linux Installation<\/h3>\n<p>Install Windows Subsystem for Linux automatically from Visual Studio with <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/automatically-install-windows-subsystem-for-linux-from-visual-studio-using-new-seamless-integration\/\">\u201cInstall WSL for Me\u201d<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"1100\" height=\"410\" class=\"wp-image-33599\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-wsl-automatic-acquisition.png\" alt=\"Image WSL Automatic Acquisition\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-wsl-automatic-acquisition.png 1100w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-wsl-automatic-acquisition-300x112.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-wsl-automatic-acquisition-1024x382.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-wsl-automatic-acquisition-768x286.png 768w\" sizes=\"(max-width: 1100px) 100vw, 1100px\" \/><\/p>\n<h3><a id=\"remote-linux-unit-test\"><\/a>Remote Linux Unit Test Support<\/h3>\n<p><a href=\"https:\/\/learn.microsoft.com\/en-us\/visualstudio\/test\/remote-testing?view=vs-2022\">Remote Linux unit test support<\/a> adds your remote Linux tests to the Test Explorer.<\/p>\n<p><img decoding=\"async\" width=\"982\" height=\"235\" class=\"wp-image-33600\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/view-test-results-from-remote-environment-in-the-t.png\" alt=\"View test results from remote environment in the test explorer\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/view-test-results-from-remote-environment-in-the-t.png 982w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/view-test-results-from-remote-environment-in-the-t-300x72.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/view-test-results-from-remote-environment-in-the-t-768x184.png 768w\" sizes=\"(max-width: 982px) 100vw, 982px\" \/><\/p>\n<h2><a id=\"productivity\"><\/a>Productivity<\/h2>\n<p>We want your development to be as fast and low-friction as possible. Our productivity features address this, giving you better ways to complete your day-to-day tasks.<\/p>\n<h3><a id=\"sticky-scroll\"><\/a>Sticky Scroll<\/h3>\n<p><a href=\"https:\/\/learn.microsoft.com\/en-us\/visualstudio\/ide\/editor-sticky-scroll?view=vs-2022\">Sticky Scroll<\/a> gives you context for the current code location in your editor by sticking the top line of nested blocks to the top of the window.<\/p>\n<p><img decoding=\"async\" width=\"1232\" height=\"329\" class=\"wp-image-33601\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/an-animation-of-the-sticky-scroll-feature-being-us.gif\" alt=\"An animation of the Sticky Scroll feature being used in C++ code.\" \/><\/p>\n<h3><a id=\"brace-pair-colorization\"><\/a>Brace Pair Colorization<\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/brace-pair-colorization-and-more-in-visual-studio\/\">Brace Pair Colorization<\/a> lets you easily see matching brace pairs by making them the same color.<\/p>\n<p><img decoding=\"async\" width=\"300\" height=\"278\" class=\"wp-image-33602\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/c-brace-pair-colorization-example.png\" alt=\"C++ Brace Pair Colorization example\" \/><\/p>\n<h3><a id=\"spell-checker\"><\/a>Spell Checker<\/h3>\n<p>The new <a href=\"https:\/\/learn.microsoft.com\/en-us\/visualstudio\/ide\/text-spell-checker?view=vs-2022\">Spell Checker<\/a> finds and corrects spelling issues in your code.<\/p>\n<p><img decoding=\"async\" width=\"642\" height=\"180\" class=\"wp-image-33603\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screen-shot-of-a-computer-description-automatic.png\" alt=\"A screen shot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screen-shot-of-a-computer-description-automatic.png 642w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screen-shot-of-a-computer-description-automatic-300x84.png 300w\" sizes=\"(max-width: 642px) 100vw, 642px\" \/><\/p>\n<h3><a id=\"all-in-one-search\"><\/a>All-in-one Search<\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/all-in-one-search-available-in-17-6\/\">All-in-one Search<\/a> joints together the code search and feature search functions into one tool.<\/p>\n<p><img decoding=\"async\" width=\"788\" height=\"496\" class=\"wp-image-33604\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica.png\" alt=\"A screenshot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica.png 788w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-300x189.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-768x483.png 768w\" sizes=\"(max-width: 788px) 100vw, 788px\" \/><\/p>\n<h4><a id=\"breakpoint-groups\"><\/a>Breakpoint Groups<\/h4>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/streamlining-your-debugging-process-with-breakpoint-groups\/\">Breakpoint groups<\/a> let you organize breakpoints to make large collections easier to manage.<\/p>\n<p><img decoding=\"async\" width=\"444\" height=\"263\" class=\"wp-image-33605\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-1.png\" alt=\"A screenshot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-1.png 444w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-1-300x178.png 300w\" sizes=\"(max-width: 444px) 100vw, 444px\" \/><\/p>\n<h3><a id=\"file-comparison-window\"><\/a>File Comparison Window<\/h3>\n<p>You can now compare files straight from the solution explorer with the <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/new-in-visual-studio-compare-files-with-solution-explorer\/\">File Comparison window<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"889\" height=\"450\" class=\"wp-image-33606\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-program-description-aut.png\" alt=\"A screenshot of a computer program Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-program-description-aut.png 889w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-program-description-aut-300x152.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-program-description-aut-768x389.png 768w\" sizes=\"(max-width: 889px) 100vw, 889px\" \/><\/p>\n<h3><a id=\"copy-paste\"><\/a>Copy-paste with Correct Indentation<\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/visual-studio-2022-17-7-now-available\/#copy-and-trim-indentation\">Copy-paste with correct indentation<\/a> makes it easier to accurately share code with others.<\/p>\n<p><img decoding=\"async\" width=\"815\" height=\"450\" class=\"wp-image-33607\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-screen-description-auto.png\" alt=\"A screenshot of a computer screen Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-screen-description-auto.png 815w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-screen-description-auto-300x166.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-screen-description-auto-768x424.png 768w\" sizes=\"(max-width: 815px) 100vw, 815px\" \/><\/p>\n<h3><a id=\"parallel-stack-filtering\"><\/a>Parallel Stack Filtering<\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/visual-studio-2022-17-7-now-available\/#parallel-stack-filtering\">Parallel stack filtering<\/a> lets you selectively display or hide specific threads or frames.<\/p>\n<p><img decoding=\"async\" width=\"1278\" height=\"908\" class=\"wp-image-33608\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-2.png\" alt=\"A screenshot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-2.png 1278w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-2-300x213.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-2-1024x728.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-2-768x546.png 768w\" sizes=\"(max-width: 1278px) 100vw, 1278px\" \/><\/p>\n<h4><a id=\"doxygen\"><\/a>Doxygen for Overloaded Functions<\/h4>\n<p>We <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/improved-doxygen-overload-resolution\/\">improved Doxygen behaviour for overload resolution.<\/a><\/p>\n<p><img decoding=\"async\" width=\"864\" height=\"419\" class=\"wp-image-33609\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-improved-doxygen-overload-resolution.png\" alt=\"Image Improved Doxygen overload resolution\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-improved-doxygen-overload-resolution.png 864w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-improved-doxygen-overload-resolution-300x145.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-improved-doxygen-overload-resolution-768x372.png 768w\" sizes=\"(max-width: 864px) 100vw, 864px\" \/><\/p>\n<h4><a id=\"macro-expansion-visualization\"><\/a>Macro Expansion Visualization<\/h4>\n<p>You can now see macro expansions step-by-step with <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/visualize-macro-expansion-for-c\/\">Macro Expansion Visualization<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"911\" height=\"468\" class=\"wp-image-33610\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-program-description-au.gif\" alt=\"A screenshot of a computer program Description automatically generated\" \/><\/p>\n<h3><a id=\"github-pr\"><\/a>Create GitHub Pull Request from Visual Studio<\/h3>\n<p>You can now <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/create-a-pull-request-in-visual-studio\/\">create GitHub pull requests from Visual Studio<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"1551\" height=\"542\" class=\"wp-image-33611\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-1.png\" alt=\"A screenshot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-1.png 1551w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-1-300x105.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-1-1024x358.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-1-768x268.png 768w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-1-1536x537.png 1536w\" sizes=\"(max-width: 1551px) 100vw, 1551px\" \/><\/p>\n<h3><a id=\"structured-diagnostics\"><\/a>Structured Diagnostics<\/h3>\n<p>Visualize complex, hierarchical compiler errors with <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/structured-diagnostics-in-the-new-problem-details-window\/\">structured diagnostics<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"460\" height=\"331\" class=\"wp-image-33612\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-2.png\" alt=\"A screenshot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-2.png 460w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-2-300x216.png 300w\" sizes=\"(max-width: 460px) 100vw, 460px\" \/><\/p>\n<h3><a id=\"size-and-alignment\"><\/a>Size and Alignment of Types<\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/size-alignment-and-memory-layout-insights-for-c-classes-structs-and-unions\/#size-and-alignment\">See size and alignment of types<\/a> directly in the editor.<\/p>\n<p><img decoding=\"async\" width=\"1090\" height=\"286\" class=\"wp-image-33613\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-3.png\" alt=\"A screenshot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-3.png 1090w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-3-300x79.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-3-1024x269.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-3-768x202.png 768w\" sizes=\"(max-width: 1090px) 100vw, 1090px\" \/><\/p>\n<h3><a id=\"memory-layout\"><\/a>Memory Layout Visualization<\/h3>\n<p>Use our new <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/size-alignment-and-memory-layout-insights-for-c-classes-structs-and-unions\/#memory-layout\">memory layout visualization<\/a> tool for seeing how types will be stored in memory.<\/p>\n<p><img decoding=\"async\" width=\"2886\" height=\"1458\" class=\"wp-image-33614\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-gif-displaying-an-example-of-memory-layout.gif\" alt=\"A GIF displaying an example of Memory Layout\" \/><\/p>\n<h3><a id=\"include-cleanup\"><\/a>Include Cleanup<\/h3>\n<p>Optimize your #includes with <a href=\"https:\/\/learn.microsoft.com\/en-us\/cpp\/ide\/include-cleanup-overview?view=msvc-170\">#include directive cleanup<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"1266\" height=\"633\" class=\"wp-image-33615\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screen-shot-of-a-computer-screen-description-aut.gif\" alt=\"A screen shot of a computer screen Description automatically generated\" \/><\/p>\n<h2><a id=\"game-development\"><\/a>Game Development<\/h2>\n<p>Game development is a key area of focus for us, as game developers often have constraints and workflows which other C++ developers do not. Last year we focused especially on our Unreal Engine support.<\/p>\n<h3><a id=\"ue-blueprint\"><\/a>Unreal Engine Blueprint References and Asset Inspector<\/h3>\n<p>Navigate your Unreal Engine Blueprints with the new <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/unreal-engine-integrations-now-available-in-visual-studio-2022\/\">Unreal Engine Blueprint References and Asset Inspector<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"1428\" height=\"546\" class=\"wp-image-33616\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-ue-blueprint-references-in-visual.png\" alt=\"A screenshot of UE Blueprint references in Visual Studio. \" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-ue-blueprint-references-in-visual.png 1428w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-ue-blueprint-references-in-visual-300x115.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-ue-blueprint-references-in-visual-1024x392.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-ue-blueprint-references-in-visual-768x294.png 768w\" sizes=\"(max-width: 1428px) 100vw, 1428px\" \/><\/p>\n<h3><a id=\"ue-log\"><\/a>Unreal Engine Log Viewer<\/h3>\n<p>Use the <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/empower-your-unreal-engine-development-with-the-latest-ue-integrations-in-visual-studio-2022\/#stream-unreal-engine-log\">Unreal Engine Log Viewer<\/a> to see your UE logs directly in Visual Studio.<\/p>\n<p><img decoding=\"async\" width=\"623\" height=\"197\" class=\"wp-image-33617\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/unreal-engine-log-tool-window-in-visual-studio-sho.png\" alt=\"Unreal Engine Log tool window in Visual Studio showing several lines of logs outputted by an Unreal Engine game\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/unreal-engine-log-tool-window-in-visual-studio-sho.png 623w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/unreal-engine-log-tool-window-in-visual-studio-sho-300x95.png 300w\" sizes=\"(max-width: 623px) 100vw, 623px\" \/><\/p>\n<h3><a id=\"hlsl\"><\/a>HLSL Support<\/h3>\n<p>Edit HLSL shaders with <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/empower-your-unreal-engine-development-with-the-latest-ue-integrations-in-visual-studio-2022\/#hlsl-tools-by-tim-jones\">improved HLSL editor integration<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"1379\" height=\"776\" class=\"wp-image-33618\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/hlsl-editor-showcasing-syntax-highlighting.png\" alt=\"HLSL editor showcasing syntax highlighting\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/hlsl-editor-showcasing-syntax-highlighting.png 1379w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/hlsl-editor-showcasing-syntax-highlighting-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/hlsl-editor-showcasing-syntax-highlighting-1024x576.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/hlsl-editor-showcasing-syntax-highlighting-768x432.png 768w\" sizes=\"(max-width: 1379px) 100vw, 1379px\" \/><\/p>\n<h3><a id=\"ue-macro\"><\/a>Unreal Engine Macro Formatting<\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/unleashing-the-power-of-visual-studio-2022-for-c-game-development\/#special-macro-indentation-rules-for-unreal-engine\">Unreal Engine macro formatting<\/a> ensures that your UE macros are handled appropriately by the autoformatter.<\/p>\n<p><img decoding=\"async\" width=\"660\" height=\"371\" class=\"wp-image-33619\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-unreal-engine-macros-formatting-for-c.png\" alt=\"Image Unreal Engine Macros Formatting for C\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-unreal-engine-macros-formatting-for-c.png 660w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-unreal-engine-macros-formatting-for-c-300x169.png 300w\" sizes=\"(max-width: 660px) 100vw, 660px\" \/><\/p>\n<h3><a id=\"ue-naming\"><\/a>Unreal Engine Naming Convention Checker<\/h3>\n<p>Use the <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/unleashing-the-power-of-visual-studio-2022-for-c-game-development\/#code-analysis-for-unreal-engine-naming-convention-checker\">Unreal Engine naming convention checker<\/a> to ensure your code conforms to expectations.<\/p>\n<p><img decoding=\"async\" width=\"869\" height=\"490\" class=\"wp-image-33620\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-unreal-engine-naming-convention-checker-for.png\" alt=\"Image Unreal Engine Naming Convention Checker for C\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-unreal-engine-naming-convention-checker-for.png 869w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-unreal-engine-naming-convention-checker-for-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-unreal-engine-naming-convention-checker-for-768x433.png 768w\" sizes=\"(max-width: 869px) 100vw, 869px\" \/><\/p>\n<h3><a id=\"ue-blueprint-find\"><\/a>Unreal Engine Blueprint Find All References<\/h3>\n<p>Find all UE Blueprint references with a single command using <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/unleashing-the-power-of-visual-studio-2022-for-c-game-development\/#unreal-engine-blueprint-find-all-references\">Unreal Engine Blueprint Find All References.<\/a><\/p>\n<p><img decoding=\"async\" width=\"1202\" height=\"367\" class=\"wp-image-33621\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-4.png\" alt=\"A screenshot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-4.png 1202w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-4-300x92.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-4-1024x313.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-4-768x234.png 768w\" sizes=\"(max-width: 1202px) 100vw, 1202px\" \/><\/p>\n<h3><a id=\"ue-test\"><\/a>Unreal Engine Test Adapter<\/h3>\n<p>The <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/unreal-engine-cpp-game-development-made-easy-visual-studio-2022\/#unreal-engine-test-adapter\">Unreal Engine test adapter<\/a> adds your UE tests to the Test Explorer window.<\/p>\n<p><img decoding=\"async\" width=\"1008\" height=\"567\" class=\"wp-image-33622\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-5.png\" alt=\"A screenshot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-5.png 1008w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-5-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatical-5-768x432.png 768w\" sizes=\"(max-width: 1008px) 100vw, 1008px\" \/><\/p>\n<h3><a id=\"ue-snippets\"><\/a>Unreal Engine Code Snippets<\/h3>\n<p>Use <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/unreal-engine-cpp-game-development-made-easy-visual-studio-2022\/#unreal-engine-code-snippets\">Unreal Engine code snippets<\/a> to quickly generate common UE-specific code.<\/p>\n<p><img decoding=\"async\" width=\"1000\" height=\"563\" class=\"wp-image-33623\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-computer-screen-shot-of-a-program-code-descripti.png\" alt=\"A computer screen shot of a program code Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-computer-screen-shot-of-a-program-code-descripti.png 1000w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-computer-screen-shot-of-a-program-code-descripti-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-computer-screen-shot-of-a-program-code-descripti-768x432.png 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<h3><a id=\"ue-macro-suggestions\"><\/a>Unreal Engine Macro Specifier Suggestions<\/h3>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/unreal-engine-cpp-game-development-made-easy-visual-studio-2022\/#unreal-engine-macro-specifier-intellisense\">Unreal Engine macro specifier suggestions<\/a> gives you a quick description of UE macros without you having to leave your editor.<\/p>\n<p><img decoding=\"async\" width=\"1367\" height=\"768\" class=\"wp-image-33624\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-program-description-aut-1.png\" alt=\"A screenshot of a computer program Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-program-description-aut-1.png 1367w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-program-description-aut-1-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-program-description-aut-1-1024x575.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-program-description-aut-1-768x431.png 768w\" sizes=\"(max-width: 1367px) 100vw, 1367px\" \/><\/p>\n<h2><a id=\"build-insights\"><\/a>Build Insights<\/h2>\n<p><a href=\"https:\/\/learn.microsoft.com\/en-us\/cpp\/build-insights\/get-started-with-cpp-build-insights?view=msvc-170\">C++ Build Insights<\/a> is a collection of tools that collect data about your C++ builds and present it in a format that can help you answer common questions, like:<\/p>\n<ul>\n<li>Are my builds sufficiently parallelized?<\/li>\n<li>What should I include in my pre-compiled header (PCH)?<\/li>\n<li>Is there a specific bottleneck I should focus on to increase my build speeds?<\/li>\n<\/ul>\n<p>Last year, we integrated <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/build-insights-now-available-in-visual-studio-2022\/\">Build Insights into Visual Studio<\/a>, letting you see details on how your #includes are affecting your builds:<\/p>\n<p><img decoding=\"async\" width=\"1024\" height=\"399\" class=\"wp-image-33625\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-included-files-view-of-the-build-insights-anal.png\" alt=\"The Included Files view of the Build Insights analysis window\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-included-files-view-of-the-build-insights-anal.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-included-files-view-of-the-build-insights-anal-300x117.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-included-files-view-of-the-build-insights-anal-768x299.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>We then added a <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/functions-view-for-build-insights-in-visual-studio-2022-17-8\/\">Functions View<\/a> for seeing the amount of time the compiler took to process specific functions:<\/p>\n<p><img decoding=\"async\" width=\"1099\" height=\"571\" class=\"wp-image-33626\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-3.png\" alt=\"A screenshot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-3.png 1099w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-3-300x156.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-3-1024x532.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screenshot-of-a-computer-description-automatica-3-768x399.png 768w\" sizes=\"(max-width: 1099px) 100vw, 1099px\" \/><\/p>\n<h2>IDE Performance<\/h2>\n<p>As well as the performance of your code, we continue to work on the performance of Visual Studio itself. Here are some of the highlights.<\/p>\n<ul>\n<li>Improved time-to-open and time-to-close<\/li>\n<\/ul>\n<p><img decoding=\"async\" width=\"800\" height=\"400\" class=\"wp-image-33627\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/chart-showing-performance-comparison-between-vs-17.png\" alt=\"Chart showing performance comparison between VS 17.5 and 17.6 on Solution Load and Solution Close. Both charts show significant improvements in the latest release.\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/chart-showing-performance-comparison-between-vs-17.png 800w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/chart-showing-performance-comparison-between-vs-17-300x150.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/chart-showing-performance-comparison-between-vs-17-768x384.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<ul>\n<li>Improved time-to-colorization<\/li>\n<\/ul>\n<p><img decoding=\"async\" width=\"2116\" height=\"1406\" class=\"wp-image-33628\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-graph-showing-time-to-intellisense-bench-marked.png\" alt=\"a graph showing time to intellisense bench marked on unreal engine 5.1. VS 17.8 =1.3s VS 17.7 =1.8s \" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-graph-showing-time-to-intellisense-bench-marked.png 2116w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-graph-showing-time-to-intellisense-bench-marked-300x199.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-graph-showing-time-to-intellisense-bench-marked-1024x680.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-graph-showing-time-to-intellisense-bench-marked-768x510.png 768w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-graph-showing-time-to-intellisense-bench-marked-1536x1021.png 1536w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-graph-showing-time-to-intellisense-bench-marked-2048x1361.png 2048w\" sizes=\"(max-width: 2116px) 100vw, 2116px\" \/><\/p>\n<ul>\n<li>Improved debug launch performance<\/li>\n<\/ul>\n<p><img decoding=\"async\" width=\"2240\" height=\"1293\" class=\"wp-image-33629\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/graph-showing-faster-debugger-launch-speed-24-secs.png\" alt=\"graph showing faster debugger launch speed 24 secs in 17.7 and 19 secs in 17.8\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/graph-showing-faster-debugger-launch-speed-24-secs.png 2240w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/graph-showing-faster-debugger-launch-speed-24-secs-300x173.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/graph-showing-faster-debugger-launch-speed-24-secs-1024x591.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/graph-showing-faster-debugger-launch-speed-24-secs-768x443.png 768w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/graph-showing-faster-debugger-launch-speed-24-secs-1536x887.png 1536w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/graph-showing-faster-debugger-launch-speed-24-secs-2048x1182.png 2048w\" sizes=\"(max-width: 2240px) 100vw, 2240px\" \/><\/p>\n<h2><a id=\"toolchain\"><\/a>Toolchain<\/h2>\n<p>Our toolchain for C++ spans components such as the <a href=\"https:\/\/learn.microsoft.com\/en-us\/cpp\/build\/reference\/compiling-a-c-cpp-program?view=msvc-170\">MSVC compiler<\/a>, our <a href=\"https:\/\/github.com\/microsoft\/STL\">open-source C++ standard library implementation<\/a>, and our <a href=\"https:\/\/learn.microsoft.com\/en-us\/cpp\/code-quality\/code-analysis-for-c-cpp-overview?view=msvc-170&amp;viewFallbackFrom=vs-2022\">code analysis tools<\/a>.<\/p>\n<h2><a id=\"conformance\"><\/a>Conformance<\/h2>\n<p>For conformance with the C and C++ standards, we added support for C11<a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c11-atomics-in-visual-studio-2022-version-17-5-preview-2\/\"> atomics<\/a> and <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c11-threads-in-visual-studio-2022-version-17-8-preview-2\/\">threads<\/a>. We also extended our <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/cpp20-support-comes-to-cpp-cli\/\">C++20 support to C++\/CLI projects<\/a>. We also shipped the <a href=\"https:\/\/learn.microsoft.com\/en-us\/cpp\/cpp\/tutorial-import-stl-named-module?view=msvc-170\">standard library modules<\/a> which are available in both C++23 mode and C++20 mode (the latter is a <a href=\"https:\/\/github.com\/microsoft\/STL\/issues\/3945\">cross-vendor extension<\/a>).<\/p>\n<p>You can see the <a href=\"https:\/\/github.com\/microsoft\/STL\/wiki\/Changelog\">STL changelog<\/a> for full details of our advances on our open-source standard library. You can also see the live <a href=\"https:\/\/microsoft.github.io\/STL\/\">STL Status Chart<\/a> to see where we\u2019re at for standards conformance. At the time of writing, only 8 standard library features remain for C++23 conformance. Thank you to everyone who contributed features in the last year! Please continue to <a href=\"https:\/\/github.com\/microsoft\/STL\/issues\">file issues<\/a> and <a href=\"https:\/\/github.com\/microsoft\/STL\/pulls\">create pull requests<\/a> on the GitHub repository; this is very much a community project.<\/p>\n<p>We also <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/open-sourcing-ifc-sdk-for-cpp-modules\/\">open-sourced the IFC SDK for C++ Modules<\/a>, which provides an interface for interacting with IFC files. IFC is an on-disk binary format which stores a representation of C++ source code for machine consumption. It was designed to implement C++ Modules, but can be used for other tools which require information about C++ code and don\u2019t want to integrate a full C++ parser. <span class=\"TextRun SCXW205442904 BCX8\" lang=\"EN-GB\" xml:lang=\"EN-GB\" data-contrast=\"auto\"><span class=\"NormalTextRun CommentStart CommentHighlightPipeClickedV2 CommentHighlightClicked SCXW205442904 BCX8\">The Microsoft Office Word codebase be<\/span><span class=\"NormalTextRun CommentHighlightClicked SCXW205442904 BCX8\">gan adopting header units with MSVC, which you can read about in <\/span><\/span><a class=\"Hyperlink SCXW205442904 BCX8\" href=\"https:\/\/devblogs.microsoft.com\/cppblog\/integrating-c-header-units-into-office-using-msvc-2-n\/\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW205442904 BCX8\" lang=\"EN-GB\" xml:lang=\"EN-GB\" data-contrast=\"none\"><span class=\"NormalTextRun CommentHighlightClicked SCXW205442904 BCX8\" data-ccp-charstyle=\"Hyperlink\">Integrating C++ header units into Office using MSVC<\/span><\/span><\/a><span class=\"TextRun SCXW205442904 BCX8\" lang=\"EN-GB\" xml:lang=\"EN-GB\" data-contrast=\"auto\"><span class=\"NormalTextRun CommentHighlightClicked SCXW205442904 BCX8\">.<\/span><\/span><\/p>\n<p>Finally, we wrote extensive <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/documentation-for-cpp20-ranges\/\">documentation for C++20 Ranges<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"941\" height=\"512\" class=\"wp-image-33630\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-view2.png\" alt=\"Image view2\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-view2.png 941w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-view2-300x163.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-view2-768x418.png 768w\" sizes=\"(max-width: 941px) 100vw, 941px\" \/><\/p>\n<h2><a id=\"code-performance\"><\/a>Code Performance<\/h2>\n<p>We\u2019ve been working on the MSVC backend to improve code generation so that your C and C++ code runs as fast as possible. We\u2019ve introduced new optimizations for ARM64 (particularly the auto-vectorizer for NEON instructions) as well as ones which will benefit all architectures (e.g. optimizations across basic blocks and vectorized loops). We also improved debug build performance by introducing new inlining controls for named type casts (like std::move and std::forward). Here are some blog posts which describe some of the bigger changes we\u2019ve made in the past year:<\/p>\n<ul>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/improving-the-state-of-debug-performance-in-c\/\">Improved debug build performance<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/msvc-arm64-optimizations-in-visual-studio-2022-17-6\/\">ARM64 optimizations<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/msvc-machine-independent-optimizations-in-visual-studio-2022-17-7\/\">Machine-independent optimizations<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/msvc-arm64-optimizations-in-visual-studio-2022-17-7\/\">More ARM64 optimizations<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/msvc-arm64-optimizations-in-visual-studio-2022-17-8\/\">Even more ARM64 optimizations!<\/a><\/li>\n<\/ul>\n<h2><a id=\"code-safety\"><\/a>Code Safety<\/h2>\n<p>Code safety has been one of our team\u2019s key focuses for the past several years. In addition to improvements to our Address Sanitizer support and static analysis tools, we produced a set of guidelines on how to <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/build-reliable-and-secure-cpp-programs-microsoft-learn\/\">build reliable and secure C++ programs<\/a>. This is a section-by-section companion to the United States government publication\u00a0<a href=\"https:\/\/nvlpubs.nist.gov\/nistpubs\/ir\/2021\/NIST.IR.8397.pdf\" target=\"_blank\" rel=\"noopener\">NISTIR 8397: Guidelines on Minimum Standards for Developer Verification of Software<\/a>.<\/p>\n<p>Here are blog posts on some of the key improvements we made:<\/p>\n<ul>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/using-key-events-with-warning-c26800\/\">Key Events for use-after-move<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/high-confidence-lifetime-checks-in-visual-studio-version-17-5-preview-2\/\">High-Confidence Lifetime Checks<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/code-analysis-improvements-in-visual-studio-17-6\/\">Several code analysis improvements<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/stdstring-now-supports-address-sanitizer\/\">Address Sanitizer support for std::string<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/addresssanitizer-continue_on_error\/\">Address Sanitizer continue_on_error mode<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/msvc-address-sanitizer-one-dll-for-all-runtime-configurations\/\">Address Sanitizer Runtime Unification<\/a><\/li>\n<\/ul>\n<h2><a id=\"vcpkg\"><\/a>vcpkg<\/h2>\n<p><a href=\"https:\/\/vcpkg.io\/en\/\">vcpkg<\/a> is our free, cross-platform package manager for C and C++. Here are some of the main advancements we made in the last year:<\/p>\n<ul>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/vcpkg-2023-04-15-release-vcpkg-ships-in-visual-studio-xbox-triplets-github-actions-cache-support-and-more\/\">vcpkg Shipped with Visual Studio<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/vcpkg-documentation-moves-to-microsoft-docs-platform\/\">Documentation moved to Microsoft Learn<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/vcpkg-integration-with-the-github-dependency-graph\/\">Integration with the GitHub Dependency Graph<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/vcpkg-2023-06-20-and-2023-07-21-releases-github-dependency-graph-support-android-tested-triplets-xbox-triplet-improvements-and-more\/#android-tested-triplets\">Android tested triplets<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/vcpkg-2023-10-19-release-export-for-manifests-documentation-improvements-and-more\/\">Default triplet is now detected from host<\/a><\/li>\n<\/ul>\n<h2><a id=\"visual-studio-code\"><\/a>Visual Studio Code<\/h2>\n<p>We have official Visual Studio Code extensions for <a href=\"https:\/\/github.com\/microsoft\/vscode-cpptools\">C++<\/a>, <a href=\"https:\/\/github.com\/microsoft\/vscode-cmake-tools\">CMake<\/a>, <a href=\"https:\/\/github.com\/microsoft\/vscode-makefile-tools\">Makefiles<\/a>, and <a href=\"https:\/\/github.com\/microsoft\/vscode-embedded-tools\">Embedded<\/a>. We also maintain a <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode.cpptools-extension-pack\">C\/C++ Extension Pack<\/a>, which collects some of these and other helpful extensions. We introduced many new features last year, most of them in response to issues filed on GitHub, so please keep sending in your feedback!<\/p>\n<h2><a id=\"cpp-extension\"><\/a>C++ Extension<\/h2>\n<h3><a id=\"missing-header\"><\/a>Missing Header File Quick Fix<\/h3>\n<p>We introduced new <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c-extension-in-vs-code-1-18-release-quick-fixes-for-missing-header-files-extract-to-function-more\/\">Quick Fixes for missing header files<\/a> &#8211; if there is an unknown symbol in your C++ code and the C\/C++ Extension identifies the correct header file in your workspace, you will now have a quick fix available.<\/p>\n<p><img decoding=\"async\" width=\"1596\" height=\"627\" class=\"wp-image-33631\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-user-selecting-a-variable-with-an-underline-sel.gif\" alt=\"a user selecting a variable with an underline, selecting the fixit and then selecting insert header. This adds the header to the top of their file.\" \/><\/p>\n<h3><a id=\"call-hierarchy\"><\/a>Call Hierarchy View<\/h3>\n<p>Use the new <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c-extension-in-vs-code-1-16-release-call-hierarchy-more\/#call-hierarchy\">Call Hierarchy view<\/a> to can easily navigate your codebase &#8211; especially to understand the complex calling relationships between functions. This was our most requested feature in 2023 and 3<sup>rd<\/sup> most requested feature of all time!<\/p>\n<p><img decoding=\"async\" width=\"1749\" height=\"1370\" class=\"wp-image-33632\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-gif-shows-a-user-navigating-to-their-call-hier.gif\" alt=\"The gif shows a user navigating to their call hierarchy by right clicking a function with a Quick Fix available, then selecting &quot;Show Call Hierarchy&quot;. This opens a side bar with all the calls. The user then clicks on the phone icon in the menu of the side bar to toggle between calls from and calls to for that function.\" \/><\/p>\n<h4><a id=\"extract-code\"><\/a>Extract Code to Function<\/h4>\n<p>You can also now <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c-extension-in-vs-code-1-18-release-quick-fixes-for-missing-header-files-extract-to-function-more\/\">automatically extract code into a function<\/a> &#8211; our 2<sup>nd<\/sup> most requested feature of 2023,and 10<sup>th<\/sup> most requested feature of all time!<\/p>\n<p><img decoding=\"async\" width=\"2434\" height=\"1365\" class=\"wp-image-33633\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-extractmethodwithoutexperimentation.gif\" alt=\"Image ExtractMethodwithoutexperimentation\" \/><\/p>\n<h3><a id=\"compiler-acquisition\"><\/a>New Compiler Acquisition Process<\/h3>\n<p>We added a new, simpler <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c-extension-in-vs-code-1-18-release-quick-fixes-for-missing-header-files-extract-to-function-more\/#new-c-compiler-acquisition-process\">C++ compiler acquisition process.<\/a><\/p>\n<p><img decoding=\"async\" width=\"1300\" height=\"224\" class=\"wp-image-33634\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-install-a-compiler-mac-shows-that-for-the-c.png\" alt=\"Image install a compiler mac, shows that for the configure intellisense command you can select install compiler\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-install-a-compiler-mac-shows-that-for-the-c.png 1300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-install-a-compiler-mac-shows-that-for-the-c-300x52.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-install-a-compiler-mac-shows-that-for-the-c-1024x176.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/image-install-a-compiler-mac-shows-that-for-the-c-768x132.png 768w\" sizes=\"(max-width: 1300px) 100vw, 1300px\" \/><\/p>\n<h3><a id=\"create-declaration-definition\"><\/a>Create Declaration\/Definition<\/h3>\n<p>You can now automatically generate a function definition from a function declaration and vice versa with the <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/vs-code-c-extension-january-update-create-definitions-and-declarations\">Create Declaration\/Definition<\/a> feature.<\/p>\n<p><img decoding=\"async\" width=\"732\" height=\"526\" class=\"wp-image-33635\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screen-shot-of-a-computer-description-automatic-1.png\" alt=\"A screen shot of a computer Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screen-shot-of-a-computer-description-automatic-1.png 732w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-screen-shot-of-a-computer-description-automatic-1-300x216.png 300w\" sizes=\"(max-width: 732px) 100vw, 732px\" \/><\/p>\n<h3><a id=\"copy-declaration-definition\"><\/a>Copy Function Declaration\/Definition<\/h3>\n<p>You can also <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c-extension-in-vs-code-1-16-release-call-hierarchy-more\/#copy-declaration-definition\">copy function declarations\/definitions<\/a> to the clipboard to customize where the declaration\/definition is placed in your code. to the clipboard.<\/p>\n<p><img decoding=\"async\" width=\"1340\" height=\"934\" class=\"wp-image-33636\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/gif-showing-that-when-you-are-creating-a-declarati.gif\" alt=\"Gif showing that when you are creating a declaration\/definition, when you click on the function, rather than selecting &quot;create declaration&quot; you will select &quot;copy declaration&quot; and vice versa for declarations.\" \/><\/p>\n<h3><a id=\"markdown-comments\"><\/a>Markdown Comment Formatting<\/h3>\n<p>When commenting on your code, you can now <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/c-extension-in-vs-code-1-18-release-quick-fixes-for-missing-header-files-extract-to-function-more\/#catching-up-adding-markdown-support#catching-up-adding-markdown-support\">use markdown to format your comments<\/a> when using the hover tooltip.<\/p>\n<p><img decoding=\"async\" width=\"1024\" height=\"572\" class=\"wp-image-33637\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/word-image-33593-44.png\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/word-image-33593-44.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/word-image-33593-44-300x168.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/word-image-33593-44-768x429.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h3><a id=\"looking-forward\"><\/a>Looking Forward<\/h3>\n<p>Looking forward, we are focusing on performance, so keep an eye out in 2024 for new features for a faster, more efficient experience in the C\/C++ Extension!<\/p>\n<h2><a id=\"cmake-extension\"><\/a>CMake Extension<\/h2>\n<h3><a id=\"test-explorer\"><\/a>Test Explorer<\/h3>\n<p>We added a <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/whats-new-for-cmake-tools-1-14-in-vs-code-test-explorer\/#test-explorer\">Test Explorer<\/a> for CTest which lets you view details of your tests and their latest results.<\/p>\n<p><img decoding=\"async\" width=\"1716\" height=\"960\" class=\"wp-image-33638\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-new-test-explorer-in-action.gif\" alt=\"The new Test Explorer in action\" \/><\/p>\n<h3><a id=\"vcpkg-portfile-debugging\"><\/a>vcpkg Portfile Debugging<\/h3>\n<p>We added support for <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/debug-vcpkg-portfiles-in-cmake-script-mode-with-visual-studio-code\/\">vcpkg portfile debugging<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"1024\" height=\"672\" class=\"wp-image-33639\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/debugging-your-portfile-cmake-using-the-cmake-debu.png\" alt=\"Debugging your portfile.cmake using the CMake debugger\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/debugging-your-portfile-cmake-using-the-cmake-debu.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/debugging-your-portfile-cmake-using-the-cmake-debu-300x197.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/debugging-your-portfile-cmake-using-the-cmake-debu-768x504.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h4><a id=\"cmake-status-bar\"><\/a>Simplified CMake Status Bar<\/h4>\n<p>We <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/visual-studio-code-cmake-tools-extension-1-16-update-new-cmake-tools-sidebar-and-cmake-debugging-options\/\">simplified the CMake Status Bar<\/a>.<\/p>\n<p><img decoding=\"async\" width=\"1024\" height=\"501\" class=\"wp-image-33640\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-new-cmake-status-bar-only-has-build-debug-an.png\" alt=\"The new CMake status bar only has Build, Debug, and Run options by default\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-new-cmake-status-bar-only-has-build-debug-an.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-new-cmake-status-bar-only-has-build-debug-an-300x147.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/the-new-cmake-status-bar-only-has-build-debug-an-768x376.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h3><a id=\"vscode-cmake-debugger\"><\/a>CMake Debugger<\/h3>\n<p>As with Visual Studio, use the new <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/introducing-cmake-debugger-in-vs-code-debug-your-cmake-scripts-using-open-source-cmake-debugger\/\">CMake Debugger<\/a> to debug your CMake scripts like you would any other program. You can set breakpoints, see the values of CMake variables at the current point of execution, and more.<\/p>\n<p><img decoding=\"async\" width=\"663\" height=\"112\" class=\"wp-image-33641\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-black-box-with-blue-text-description-automatica.png\" alt=\"A black box with blue text Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-black-box-with-blue-text-description-automatica.png 663w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/02\/a-black-box-with-blue-text-description-automatica-300x51.png 300w\" sizes=\"(max-width: 663px) 100vw, 663px\" \/><\/p>\n<h2><a id=\"conference-talks\"><\/a>Conference Talks<\/h2>\n<p>Our main two events for this year were <a href=\"https:\/\/cppcon.org\/\">CppCon<\/a> and <a href=\"https:\/\/learn.microsoft.com\/en-us\/events\/learn-events\/pure-virtual-c-plus-plus\/\">Pure Virtual C++<\/a>. You can read our <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/microsoft-visual-c-at-cppcon-2023-trip-report\/\">trip report for CppCon<\/a> to find out what we thought.<\/p>\n<p>Here are the videos for all our talks this past year at many conferences:<\/p>\n<ul>\n<li>Pure Virtual C++\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Bi-J1amqFTA\">C++ Compiler Errors for Humans<\/a> \u2013 Sy Brand<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=i8_RfDAEjMs\">Address Sanitizer continue_on_error<\/a> \u2013 Jim Radigan<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=GzBzDW86cwk\">Productive Cross-Platform and Game Development in Visual Studio <\/a>\u2013 Sinem Akinci &amp; David Li<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=fXh2hVsFDso\">Build Time Reflection with C++ in Year 2023<\/a> \u2013 Gabriel Dos Reis<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=AWZRa3BXEnM\">Value Oriented Programming<\/a> \u2013 Tony Van Eerd (guest)<\/li>\n<\/ul>\n<\/li>\n<li>CppCon\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=PTdy65m_gRE&amp;feature=youtu.be\">Lifetime Safety in C++<\/a> \u2013 Gabor Horvath<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=0UbkMysE7OM\">New in Visual Studio: CMake Debugger, Better Diagnostics, and Video Games<\/a> \u2013 David Li &amp; Mryam Girmay<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=8U3hl8XMm8c\">Cooperative C++ Evolution: Towards a Typescript for C++<\/a> \u2013 Herb Sutter (Keynote)<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Soy3RjGYUJw\">How Visual Studio Code Can Help You Develop More Efficiently in C++<\/a> \u2013 Alexandra Kemper &amp; Sinem Akinci<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=NReDubvNjRg\">Getting Started with C++<\/a> \u2013 Michael Price<\/li>\n<\/ul>\n<\/li>\n<li>ACCU\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=9mjNbl6DZnI\">Cracking Collaboration: Problems and Solutions for C++ Development<\/a> &#8211; Sinem Akinci &amp; Alexandra Kemper<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=bRFLKEfPvgk&amp;t=6s\">And Then() Some(T)<\/a> \u2013 Victor Ciura<\/li>\n<\/ul>\n<\/li>\n<li>Meeting C++\n<ul>\n<li><a href=\"https:\/\/youtu.be\/BkyrQgjJVAo?si=uwd8tiBl4AWpnXPB\">AI Assistants for C++ Developers<\/a> \u2013 Michael Price<\/li>\n<\/ul>\n<\/li>\n<li>Code::dive\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-STE4rQjrjk\">Swift ABI Resilience<\/a> \u2013 Victor Ciura<\/li>\n<\/ul>\n<\/li>\n<li>C++ on Sea\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=8FlP0FiARAI\">C++ Mythbusters Strike 2<\/a> \u2013 Victor Ciura<\/li>\n<\/ul>\n<\/li>\n<li>NDC Techtown\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=B0l7aE9KXOs\">C++ Mythbusters Strike 2<\/a> \u2013 Victor Ciura<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>Send us your feedback!<\/h2>\n<p>The comments below are open for us to track any requests. You can also find us on Twitter (<a href=\"https:\/\/twitter.com\/visualc\">@VisualC<\/a>) or via email at\u00a0<a href=\"mailto:visualcpp@microsoft.com\">visualcpp@microsoft.com<\/a>. To open a bug for Visual Studio, please see\u00a0<a href=\"https:\/\/developercommunity.visualstudio.com\/report?space=8&amp;entry=problem\">Visual Studio Feedback<\/a>. To leave feedback for VS Code, visit the GitHub repository for the <a href=\"https:\/\/github.com\/microsoft\/vscode-cpptools\">C++<\/a>, <a href=\"https:\/\/github.com\/microsoft\/vscode-cmake-tools\">CMake<\/a>, <a href=\"https:\/\/github.com\/microsoft\/vscode-makefile-tools\">Makefiles<\/a>, or <a href=\"https:\/\/github.com\/microsoft\/vscode-embedded-tools\">Embedded<\/a> extension. We look forward to another year of C++!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As we enter the new year, it\u2019s a good time to look back at all the features and improvements we made for C++ developers in our tools in 2023. We\u2019ve made advancements across Visual Studio, Visual Studio Code, our toolchain, and the vcpkg package manager in both performance and functionality. Some particular areas of focus [&hellip;]<\/p>\n","protected":false},"author":706,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,272,275],"tags":[],"class_list":["post-33593","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus","category-vcpkg","category-visual-studio-code"],"acf":[],"blog_post_summary":"<p>As we enter the new year, it\u2019s a good time to look back at all the features and improvements we made for C++ developers in our tools in 2023. We\u2019ve made advancements across Visual Studio, Visual Studio Code, our toolchain, and the vcpkg package manager in both performance and functionality. Some particular areas of focus [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/33593","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=33593"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/33593\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=33593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=33593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=33593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}