{"id":34498,"date":"2024-08-13T13:36:48","date_gmt":"2024-08-13T13:36:48","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cppblog\/?p=34498"},"modified":"2024-08-21T18:09:39","modified_gmt":"2024-08-21T18:09:39","slug":"whats-new-for-cpp-developers-in-visual-studio-2022-17-11","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/whats-new-for-cpp-developers-in-visual-studio-2022-17-11\/","title":{"rendered":"What\u2019s New for C++ Developers in Visual Studio 2022 17.11"},"content":{"rendered":"<p>We are happy to announce that Visual Studio 2022 version 17.11 is now generally available! This post summarizes the new features you can find in this release for C++. You can download Visual Studio 2022 from the <a href=\"https:\/\/visualstudio.microsoft.com\/downloads\/\" target=\"_blank\" rel=\"noopener\">Visual Studio downloads page\u00a0<\/a>or upgrade your existing installation by following the\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/visualstudio\/install\/update-visual-studio?view=vs-2022\" target=\"_blank\" rel=\"noopener\">Update Visual Studio Learn page<\/a>.<\/p>\n<h2>Standard Library<\/h2>\n<p>We\u2019re continuing to improve our open source\u00a0<a href=\"https:\/\/github.com\/microsoft\/STL\" target=\"_blank\" rel=\"noopener\">standard library implementation<\/a>. Thank you to everyone who has contributed features and fixes to this release! You can find the full set of changes at the\u00a0<a href=\"https:\/\/github.com\/microsoft\/STL\/wiki\/Changelog\" target=\"_blank\" rel=\"noopener\">STL changelog<\/a>.<\/p>\n<h2>Formatted Output<\/h2>\n<p>We\u2019ve made several advancements in our formatted output implementation. As part of <a href=\"https:\/\/wg21.link\/P2286R8\">P2286R8<\/a>\u00a0Formatting Ranges, we\u2019ve implemented <code>std::range_formatter<\/code> and formatters for <code>std::pair<\/code> and <code>std::tuple<\/code>. We\u2019ve also added support for calling <code>std::println()<\/code> with no arguments, which prints a blank line (proposed in <a href=\"https:\/\/wg21.link\/P3142R0\">P3142R0<\/a>, which importantly also includes a recipe for banana bread).<\/p>\n<h2>Diagnostics<\/h2>\n<p>This release also comes with some improved error messages for a couple of scenarios. The first is for when you call <code>std::get&lt;T&gt;<\/code> on a <code>std::tuple<\/code> that has multiple instances of T in its template arguments. MSVC used to produce the following error:<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">error C2338: static_assert failed: 'duplicate type T in get&lt;T&gt;(tuple)'<\/code><\/pre>\n<p>In Visual Studio 17.11, MSVC produces this error:<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">error C2338: static_assert failed: 'get&lt;T&gt;(tuple&lt;Types...&gt;&amp;) requires T to occur exactly once in Types. (N4971 [tuple.elem]\/5)'<\/code><\/pre>\n<p>We also improved the diagnostics for when std::ranges::to is unable to construct the requested result. MSVC used to print a message such as this:<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]\/2.3'<\/code><\/pre>\n<p>In Visual Studio 2022 17.11, we provide more details:<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]\/2.1.5)'<\/code><\/pre>\n<h2>Vectorization<\/h2>\n<p>We\u2019ve improved vectorization for several algorithms, some by adding custom vectorized implementations, some by helping the compiler auto-vectorize the code. The improved algorithms are:<\/p>\n<ul>\n<li><code>replace_copy()<\/code>,\u00a0<code>replace_copy_if()<\/code>,\u00a0<code>ranges::replace_copy<\/code>, and\u00a0<code>ranges::replace_copy_if<\/code><\/li>\n<li><code>find_first_of()<\/code>\u00a0and\u00a0<code>ranges::find_first_of<\/code>\u00a0for 8-bit and 16-bit elements<\/li>\n<li><code>mismatch()<\/code>\u00a0and\u00a0<code>ranges::mismatch<\/code><\/li>\n<li><code>count()<\/code> and\u00a0<code>ranges::count<\/code><\/li>\n<li><code>find()<\/code>, <code>ranges::find<\/code>, and\u00a0<code>ranges::find_last<\/code><\/li>\n<li><code>ranges::iota<\/code><\/li>\n<\/ul>\n<h2>Core Editor<\/h2>\n<h2>Code Search Scoping<\/h2>\n<p>You can now narrow the scope of code searches with the newly added scoping options.<\/p>\n<p>For the default code search experience and each filter, you can now set the scope to\u00a0<em>Entire solution<\/em>,\u00a0<em>Current project<\/em>, or\u00a0<em>Current document<\/em>\u00a0and toggle inclusion of external files.<\/p>\n<p>You can set different scopes for different filters. For example, the default experience can be set to look through\u00a0<em>Entire solution<\/em>\u00a0and\u00a0<strong>members<\/strong>\u00a0can be set to look through only current document. Your selections will be preserved past the current session.<\/p>\n<p><img decoding=\"async\" width=\"793\" height=\"502\" class=\"wp-image-34499\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/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\/08\/a-screenshot-of-a-computer-description-automatica.png 793w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/a-screenshot-of-a-computer-description-automatica-300x190.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/a-screenshot-of-a-computer-description-automatica-768x486.png 768w\" sizes=\"(max-width: 793px) 100vw, 793px\" \/><\/p>\n<p>This feature must be enabled under\u00a0<strong>Tools -&gt; Manage Preview Features<\/strong>.<\/p>\n<h2>Pull Request Support in Visual Studio<\/h2>\n<h3>Pull Request Comments<\/h3>\n<p>We&#8217;ve made it easier to view your GitHub and Azure DevOps pull request comments directly in your working file in Visual Studio. You can now stay in your context, make necessary code changes, and interact with your colleagues&#8217; suggestions without switching contexts to the browser.<\/p>\n<p>Enable the feature flag,\u00a0<strong>Pull Request Comments<\/strong>, checkout any branch with an active pull request branch, and click on\u00a0<strong>Show comments in files<\/strong>\u00a0in the InfoBar.<\/p>\n<p><img decoding=\"async\" width=\"900\" height=\"506\" class=\"wp-image-34500\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/view-pull-request-comments-notification.png\" alt=\"View pull request comments notification\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/view-pull-request-comments-notification.png 900w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/view-pull-request-comments-notification-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/view-pull-request-comments-notification-768x432.png 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>The latest improvements include better support for @ mentions and work item references, visual improvements to the attention dot and comment margin, the addition of avatars, better sync with the server, and an additional entry point in the Git changes window. This feature must be enabled under\u00a0<strong>Tools -&gt; Manage Preview Features<\/strong>.<\/p>\n<h3>Pull Requests Using Drafts and Templates<\/h3>\n<p>You can now create pull request drafts and start your descriptions with GitHub templates in Visual Studio. These were the two top requests for the create a pull request experience.<\/p>\n<p>Use the drop-down menu on the\u00a0<strong>Create<\/strong>\u00a0button to\u00a0<strong>Create as Draft<\/strong>.<\/p>\n<p><img decoding=\"async\" width=\"504\" height=\"284\" class=\"wp-image-34501\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/create-pull-requests-draft-option.png\" alt=\"Create pull requests draft option\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/create-pull-requests-draft-option.png 504w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/create-pull-requests-draft-option-300x169.png 300w\" sizes=\"(max-width: 504px) 100vw, 504px\" \/><\/p>\n<p>Your default PR template will be used when creating a new PR for both GitHub and Azure DevOps. Learn more about how to add a PR template to your repository in the\u00a0<a href=\"https:\/\/docs.github.com\/en\/communities\/using-templates-to-encourage-useful-issues-and-pull-requests\/creating-a-pull-request-template-for-your-repository\">GitHub documentation<\/a>\u00a0and\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/devops\/repos\/git\/pull-request-templates?view=azure-devops#default-pull-request-templates\">Azure DevOps documentation<\/a>. This feature must be enabled under\u00a0<strong>Tools -&gt; Manage Preview Features<\/strong>.<\/p>\n<h2>Game Development<\/h2>\n<h2>Build Insights Quality of Life Update<\/h2>\n<p>In this update, we added quality of life changes to C++ Build Insights integration. You can now filter your Build Insights trace results by project. For results in each row, you will now see the relative path and file name instead of the full path. We have also improved the grouping of results in the Included Files view.<\/p>\n<p><img decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-image-34502\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/build-insights-qol-update.png\" alt=\"Build Insights QoL Update\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/build-insights-qol-update.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/build-insights-qol-update-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/build-insights-qol-update-768x432.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h2>Unreal Engine Add Class Templates<\/h2>\n<p>You can now add additional common Unreal Engine class templates to your project with the new\u00a0<strong>Add Class<\/strong>\u00a0dialog. This dialog provides a list of common Unreal Engine class templates that you can add to your project. You can also now add your class to a module of your choosing.<\/p>\n<p>To get started, right click on the project in Solution Explorer and select\u00a0<strong>Add<\/strong>\u00a0&gt;\u00a0<strong>Unreal Engine Item<\/strong>. In the\u00a0<strong>Add New Item<\/strong>\u00a0dialog, select\u00a0<strong>Unreal Engine Class<\/strong>\u00a0to open the\u00a0<strong>Add Class<\/strong>\u00a0dialog.<\/p>\n<p><img decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-image-34503\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-add-class.png\" alt=\"Unreal Engine Add Class\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-add-class.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-add-class-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-add-class-768x432.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h2>Unreal Engine Add Module<\/h2>\n<p>You can now add Unreal Engine modules to your project with the new\u00a0<strong>Add Module<\/strong>\u00a0dialog.<\/p>\n<p>To get started, right click on the project in Solution Explorer and select\u00a0<strong>Add<\/strong>\u00a0&gt;\u00a0<strong>Unreal Engine Item<\/strong>. In the\u00a0<strong>Add New Item<\/strong>\u00a0dialog, select\u00a0<strong>Empty Unreal Engine Module<\/strong>\u00a0to open the\u00a0<strong>Add Module<\/strong>\u00a0dialog.<\/p>\n<p><img decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-image-34504\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-add-class-1.png\" alt=\"Unreal Engine Add Class\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-add-class-1.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-add-class-1-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-add-class-1-768x432.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h2>Unreal Engine Toolbar<\/h2>\n<p>The new Unreal Engine toolbar provides quick access to Unreal Engine related actions. The toolbar is available when you have an Unreal Engine project loaded in Visual Studio. The toolbar includes the following actions:<\/p>\n<ol>\n<li>Quickly attach to Unreal Engine processes<\/li>\n<li>Rescan Blueprints Cache<\/li>\n<li>Quick Access to Unreal Engine Log<\/li>\n<li>Quick Access Unreal Engine Configuration Page for Visual Studio<\/li>\n<\/ol>\n<p><img decoding=\"async\" width=\"1024\" height=\"576\" class=\"wp-image-34505\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-toolbar.png\" alt=\"Unreal Engine Toolbar\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-toolbar.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-toolbar-300x169.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/unreal-engine-toolbar-768x432.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h2>Cross-Platform<\/h2>\n<h2>CMake Debugger Linux Support<\/h2>\n<p>We have added support for the CMake debugger in CMake projects targeting Linux via WSL or SSH. The CMake debugger allows you to debug your CMake scripts and\u00a0<em>CMakeLists.txt<\/em>\u00a0files through the Visual Studio debugger.<\/p>\n<p>To start a CMake debugging session, set a breakpoint in your\u00a0<em>CMakeLists.txt<\/em>\u00a0file and then navigate to\u00a0<strong>Project &gt; Configure Cache with CMake Debugging<\/strong>.<\/p>\n<p><img decoding=\"async\" width=\"610\" height=\"343\" class=\"wp-image-34506\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/cmake-debugger-linux.png\" alt=\"CMake debugger Linux\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/cmake-debugger-linux.png 610w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/cmake-debugger-linux-300x169.png 300w\" sizes=\"(max-width: 610px) 100vw, 610px\" \/><\/p>\n<h2>Debugging<\/h2>\n<h2>Faster C++ Breakpoints<\/h2>\n<p>We have significantly enhanced the performance of conditional breakpoints in C++ through a reworked implementation.<\/p>\n<p>Beginning with version 17.11, our initial assessment finds that execution time is almost four times as fast, reducing execution time from 80 seconds to 21 seconds over 80,000 iterations.<\/p>\n<h2>Auto-add Breakpoints to the Default Group<\/h2>\n<p>You can now mark the selected breakpoint group as the default, ensuring all newly added breakpoints are automatically included in that group.<\/p>\n<p><img decoding=\"async\" width=\"900\" height=\"432\" class=\"wp-image-34507\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/default-breakpoint-group.png\" alt=\"Default Breakpoint Group\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/default-breakpoint-group.png 900w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/default-breakpoint-group-300x144.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/default-breakpoint-group-768x369.png 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<h2>GitHub Copilot<\/h2>\n<h2>Copilot Naming Suggestions<\/h2>\n<p>GitHub Copilot can now generate naming suggestions for your identifiers (variables, methods, or classes) based on how your identifier is being used and the style of your code.<\/p>\n<p><img decoding=\"async\" width=\"700\" height=\"346\" class=\"wp-image-34508\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/rename-suggestions.png\" alt=\"Rename suggestions\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/rename-suggestions.png 700w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/rename-suggestions-300x148.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>To try it out, you&#8217;ll need an active\u00a0<a href=\"https:\/\/visualstudio.microsoft.com\/github-copilot\/\">GitHub Copilot subscription<\/a>. Navigate to any variable you wish to rename, right-click -&gt;\u00a0<strong>Rename<\/strong>\u00a0(Keyboard:\u00a0Ctrl+R,\u00a0Ctrl+R). You&#8217;ll notice a GitHub Copilot sparkle icon that you can click or toggle to generate naming suggestions.<\/p>\n<h2>Copilot in Quick Info<\/h2>\n<p>When you hover over symbols in your codebase, you\u2019ll now have the ability to invoke Copilot conveniently within the Quick Info dialog to learn more about a given symbol and enhance existing or lacking code documentation.<\/p>\n<p><img decoding=\"async\" width=\"1378\" height=\"293\" class=\"wp-image-34509\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/word-image-34498-11.png\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/word-image-34498-11.png 1378w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/word-image-34498-11-300x64.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/word-image-34498-11-1024x218.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2024\/08\/word-image-34498-11-768x163.png 768w\" sizes=\"(max-width: 1378px) 100vw, 1378px\" \/><\/p>\n<h2>Send us your feedback<\/h2>\n<p>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\u00a0<a href=\"https:\/\/developercommunity.visualstudio.com\/cpp\" target=\"_blank\" rel=\"noopener\">Visual Studio Developer Community<\/a>. You can also reach us on Twitter (<a href=\"https:\/\/twitter.com\/visualc\" target=\"_blank\" rel=\"noopener\">@VisualC<\/a>), or via email at\u00a0<a href=\"mailto:visualcpp@microsoft.com\">visualcpp@microsoft.com<\/a>.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We are happy to announce that Visual Studio 2022 version 17.11 is now generally available! This post summarizes the new features you can find in this release for C++. You can download Visual Studio 2022 from the Visual Studio downloads page\u00a0or upgrade your existing installation by following the\u00a0Update Visual Studio Learn page. Standard Library We\u2019re [&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":[270,1],"tags":[],"class_list":["post-34498","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-announcement","category-cplusplus"],"acf":[],"blog_post_summary":"<p>We are happy to announce that Visual Studio 2022 version 17.11 is now generally available! This post summarizes the new features you can find in this release for C++. You can download Visual Studio 2022 from the Visual Studio downloads page\u00a0or upgrade your existing installation by following the\u00a0Update Visual Studio Learn page. Standard Library We\u2019re [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/34498","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=34498"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/34498\/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=34498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=34498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=34498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}