{"id":7301,"date":"2015-12-03T11:57:00","date_gmt":"2015-12-03T18:57:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vcblog\/2015\/12\/03\/c-core-guidelines-checkers-available-for-vs-2015-update-1\/"},"modified":"2021-10-05T13:58:48","modified_gmt":"2021-10-05T13:58:48","slug":"c-core-guidelines-checkers-available-for-vs-2015-update-1","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/c-core-guidelines-checkers-available-for-vs-2015-update-1\/","title":{"rendered":"C++ Core Guidelines Checkers available for VS 2015 Update 1"},"content":{"rendered":"<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">[This post was written by\u00a0Andrew Pardoe and Neil MacIntosh]<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">Update: The CppCoreCheck tools are now part of VS 2017:\u00a0<a href=\"https:\/\/blogs.msdn.microsoft.com\/vcblog\/2016\/10\/12\/cppcorecheck\">https:\/\/blogs.msdn.microsoft.com\/vcblog\/2016\/10\/12\/cppcorecheck<\/a>.<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">Back in September at<span class=\"Apple-converted-space\">\u00a0<\/span><a target=\"_blank\" href=\"http:\/\/cppcon.org\/2015program\/\" rel=\"noopener\">CppCon 2015<\/a><\/span><span style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #000000;text-indent: 0px;letter-spacing: normal;float: none\"><span class=\"Apple-converted-space\">\u00a0<\/span>Neil announced that we would be shipping new code analysis tools for C++ that would enforce some of the rules in the C++ Core Guidelines. (A video of the talk is available here:<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><span style=\"color: #000000\"><a target=\"_blank\" href=\"https:\/\/www.youtube.com\/watch?v=rKlHvAw1z50\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=rKlHvAw1z50<\/a>\u00a0<\/span><span style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #000000;text-indent: 0px;letter-spacing: normal;float: none\">and slides are available on the<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><span style=\"color: #000000\"><a target=\"_blank\" href=\"https:\/\/github.com\/isocpp\/CppCoreGuidelines\/blob\/master\/talks\/MacIntosh%20-%20Static%20Analysis%20and%20C%2B%2B.pdf\" rel=\"noopener\">ISOCpp GitHub repo<\/a>.)<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">Earlier this week we made the first set of those code analysis tools freely available as a NuGet package that can be installed by users of Visual Studio 2015 Update 1. The package currently contains checkers for the<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><a target=\"_blank\" href=\"https:\/\/github.com\/isocpp\/CppCoreGuidelines\/blob\/master\/CppCoreGuidelines.md#SS-bounds\" rel=\"noopener\">Bounds<\/a><span style=\"color: #000000\"><span class=\"Apple-converted-space\">\u00a0<\/span>and<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><a target=\"_blank\" href=\"https:\/\/github.com\/isocpp\/CppCoreGuidelines\/blob\/master\/CppCoreGuidelines.md#SS-type\" rel=\"noopener\">Type<\/a><span style=\"color: #000000\"><span class=\"Apple-converted-space\">\u00a0<\/span>profiles.\u00a0<\/span><span style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal;float: none\"><span style=\"color: #000000\">Tooling for the<\/span><span class=\"Apple-converted-space\">\u00a0<\/span><\/span><span style=\"color: #000000\"><a target=\"_blank\" href=\"https:\/\/github.com\/isocpp\/CppCoreGuidelines\/blob\/master\/CppCoreGuidelines.md#SS-lifetime\" rel=\"noopener\">Lifetime profile<\/a><\/span><span style=\"color: #000000\"><span style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';text-indent: 0px;letter-spacing: normal;float: none\"><span class=\"Apple-converted-space\">\u00a0<\/span>demonstrated in Herb Sutter&#8217;s plenary talk (video at<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><\/span><span style=\"color: #000000\"><a target=\"_blank\" href=\"https:\/\/www.youtube.com\/watch?v=hEx5DNLWGgA\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=hEx5DNLWGgA<\/a>) will be made available in a future release of the code analysis tools.<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">The package is named \u201cMicrosoft.CppCoreCheck\u201d, and a direct link to the package is here:<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><a target=\"_blank\" href=\"http:\/\/www.nuget.org\/packages\/Microsoft.CppCoreCheck\" rel=\"noopener\">http:\/\/www.nuget.org\/packages\/Microsoft.CppCoreCheck<\/a><span style=\"color: #000000\">.<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">To enable the new code analysis tools, simply install the NuGet packages to each C++ project that you want checked within Visual Studio. <\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\"><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/8765.manage.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/8765.manage.png\" alt=\"Image 8765 manage\" width=\"501\" height=\"733\" class=\"alignnone size-full wp-image-29221\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/8765.manage.png 501w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/8765.manage-205x300.png 205w\" sizes=\"(max-width: 501px) 100vw, 501px\" \/><\/a><\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\"><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/2352.Capture.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/2352.Capture.png\" alt=\"Image 2352 Capture\" width=\"857\" height=\"570\" class=\"alignnone size-full wp-image-29219\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/2352.Capture.png 857w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/2352.Capture-300x200.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/2352.Capture-768x511.png 768w\" sizes=\"(max-width: 857px) 100vw, 857px\" \/><\/a><\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">The NuGet package adds an additional MSBuild targets file that gets invoked when you have code analysis enabled on your project. This targets file adds the CppCoreCheck as an additional plugin to the\u00a0PREfast code analysis tool.\u00a0You can enable code analysis by selecting the checkbox in the Code Analysis section of the project Properties dialog. It doesn&#8217;t matter what rule set you select&#8211;the CppCoreCheck rule sets will always run when Code Analysis is enabled.<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/7571.analysis.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/7571.analysis.png\" alt=\"Image 7571 analysis\" width=\"822\" height=\"559\" class=\"alignnone size-full wp-image-29220\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/7571.analysis.png 822w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/7571.analysis-300x204.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2021\/10\/7571.analysis-768x522.png 768w\" sizes=\"(max-width: 822px) 100vw, 822px\" \/><\/a>\n<span style=\"color: #000000\">These tools are an important first step in ensuring that users of Visual Studio can benefit from enforcement of the C++ Core Guidelines. Please note that they require Visual Studio 2015 Update 1 and will not work with earlier releases.<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">Here&#8217;s an example of the kind of issues that the tools will find:<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000;font-family: terminal,monaco\"><span class=\"token\"><span style=\"color: #3366ff\">void<\/span> main()<\/span>\n<span class=\"token\">{<\/span>\n<span class=\"token\"><span style=\"color: #3366ff\">\u00a0\u00a0\u00a0 int<\/span> arr[10];\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #339966\">\/\/ BAD, warning 26494 will be fired<\/span><\/span>\n<span class=\"token\"><span style=\"color: #3366ff\">\u00a0\u00a0\u00a0\u00a0int<\/span>* p = arr;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: #339966\">\/\/ BAD, warning 26485 will be fired<\/span><\/span><\/span><\/p>\n<p><span class=\"token\">\u00a0\u00a0\u00a0 [[suppress(bounds.1)]] <span style=\"color: #339966\">\/\/\u00a0This attribute suppresses Bounds rule #1<\/span><\/span>\n<span class=\"token\">\u00a0\u00a0\u00a0 {<\/span>\n<span class=\"token\"><span style=\"color: #3366ff\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int<\/span>* q = p + 1;\u00a0\u00a0\u00a0 <span style=\"color: #339966\">\/\/ BAD, warning 26481 would be fired<\/span><\/span>\n<span class=\"token\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 p = q++;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: #339966\">\/\/ BAD, warning 26481 would be fired<\/span><\/span>\n<span class=\"token\">\u00a0\u00a0\u00a0 }<\/span>\n<span class=\"token\">}<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">There are a few interesting things to note here. First, let&#8217;s look at the full description of the warnings that will come from this code sample:<\/span><\/p>\n<ul>\n<li>\n<div style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">26494 is<\/span><span class=\"Apple-converted-space\">\u00a0<\/span><a target=\"_blank\" href=\"https:\/\/github.com\/isocpp\/CppCoreGuidelines\/blob\/master\/CppCoreGuidelines.md#Pro-type-init\" rel=\"noopener\">Type Rule 5<\/a><span style=\"color: #000000\">: Always initialize an object.<\/span><\/div>\n<\/li>\n<li>\n<div style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">26485 is<\/span><span class=\"Apple-converted-space\">\u00a0<\/span><a target=\"_blank\" href=\"https:\/\/github.com\/isocpp\/CppCoreGuidelines\/blob\/master\/CppCoreGuidelines.md#Pro-bounds-decay\" rel=\"noopener\">Bounds Rule 3<\/a><span style=\"color: #000000\">: No array to pointer decay.<\/span><\/div>\n<\/li>\n<li>\n<div style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">26481 is<\/span><span class=\"Apple-converted-space\">\u00a0<\/span><a target=\"_blank\" href=\"https:\/\/github.com\/isocpp\/CppCoreGuidelines\/blob\/master\/CppCoreGuidelines.md#Pro-bounds-arithmetic\" rel=\"noopener\">Bounds Rule 1<\/a><span style=\"color: #000000\">: Don&#8217;t use pointer arithmetic. Use span instead.<\/span><\/div>\n<\/li>\n<\/ul>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">The first two warnings fire when you compile this code with the CppCoreCheck code analysis installed and activated. But the third warning doesn&#8217;t fire because of the attribute. The developer marked this code block to keep CppCoreCheck from detecting any violation of Bounds Rule 1. He could have marked the other statements to suppress Type Rule 5, or even suppressed the entire bounds profile by writing <span style=\"font: 14px\/19px Menlo, Monaco, Consolas, 'Droid Sans Mono', 'Courier New', monospace, 'Droid Sans Fallback';text-align: left;color: #d7ba7d;text-indent: 0px;letter-spacing: normal;float: none\">[[suppress(bounds)]] <\/span>without including a specific rule number. The C++ Core Guidelines are there to help you write better and safer code but C++ is ultimately about providing the developer with the\u00a0ability to\u00a0do the right thing. In an instance where a rule\u00a0or\u00a0a profile shouldn&#8217;t be applied, it&#8217;s easy to suppress them directly in the code. \u00a0<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">While the code analysis tools aren\u2019t yet open source, distributing them on NuGet means we can update them to address any issues you might find. We also look forward to adding checkers for new profiles (such as Lifetime) as they are developed in the Guidelines. Feel free to send us mail at<\/span><span class=\"Apple-converted-space\">\u00a0<\/span><a target=\"_blank\" href=\"mailto:\/\/cppcorecheck@microsoft.com\" rel=\"noopener\">cppcorecheck@microsoft.com<\/a><span style=\"color: #000000\"><span class=\"Apple-converted-space\">\u00a0<\/span>with your feedback!<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">The NuGet package containing our analysis tools installs a subsidiary package containing Microsoft\u2019s implementation of the Guideline Support Library (GSL). The package is also available standalone at<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><a target=\"_blank\" href=\"http:\/\/www.nuget.org\/packages\/Microsoft.Gsl\" rel=\"noopener\">http:\/\/www.nuget.org\/packages\/Microsoft.Gsl<\/a><span style=\"color: #000000\">. This library is essential if you want to follow the Core Guidelines and replace use of constructs like a<\/span><span style=\"color: #3366ff\"><span class=\"Apple-converted-space\">\u00a0<\/span><code style=\"color: #d7ba7d;line-height: 19px;font-family: Menlo, Monaco, Consolas, 'Droid Sans Mono', 'Courier New', monospace, 'Droid Sans Fallback';font-size: 14px\">T*+ length<\/code><span class=\"Apple-converted-space\" style=\"color: #000000\">\u00a0<\/span><\/span><span style=\"color: #000000\">pair of parameters with the<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><code style=\"color: #d7ba7d;line-height: 19px;font-family: Menlo, Monaco, Consolas, 'Droid Sans Mono', 'Courier New', monospace, 'Droid Sans Fallback';font-size: 14px\">span&lt;T&gt;<\/code><span style=\"color: #000000\"><span class=\"Apple-converted-space\">\u00a0<\/span>type from the GSL. The GSL is open source, so if you want to take a look at the library sources, comment, or contribute, please come see us at<\/span><span class=\"Apple-converted-space\">\u00a0<\/span><a target=\"_blank\" href=\"https:\/\/github.com\/Microsoft\/GSL\" rel=\"noopener\">https:\/\/github.com\/Microsoft\/GSL<\/a>.<\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">Finally, the C++ Core Guidelines is an open, community-based effort, and in that spirit\u00a0we would also like to take this opportunity to point people to an alternative implementation of the checks for the Bounds and Type profiles. The clang-tidy developers have already included a number of checks for these profiles in the open source clang-tidy project. You can find out more about clang-tidy and their checks for the C++ Core Guidelines here:<span class=\"Apple-converted-space\">\u00a0<\/span><\/span><a target=\"_blank\" href=\"http:\/\/clang.llvm.org\/extra\/clang-tidy\/\" rel=\"noopener\">http:\/\/clang.llvm.org\/extra\/clang-tidy\/<\/a><span style=\"color: #000000\">.<\/span><\/p>\n<p style=\"font: 14px\/22px 'Segoe WPC', 'Segoe UI', SFUIText-Light, HelveticaNeue-Light, sans-serif, 'Droid Sans Fallback';color: #dddddd;text-indent: 0px;letter-spacing: normal\"><span style=\"color: #000000\">We are really excited about all these first steps towards supporting enforcement of the Core Guidelines. As always, we welcome your feedback about the good and the bad with these tools and libraries so that we can keep improving on them. Let us know your thoughts at\u00a0<a target=\"_blank\" href=\"mailto:cppcorecheck@microsoft.com\" rel=\"noopener\">cppcorecheck@microsoft.com<\/a>!<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[This post was written by\u00a0Andrew Pardoe and Neil MacIntosh] Update: The CppCoreCheck tools are now part of VS 2017:\u00a0https:\/\/blogs.msdn.microsoft.com\/vcblog\/2016\/10\/12\/cppcorecheck. Back in September at\u00a0CppCon 2015\u00a0Neil announced that we would be shipping new code analysis tools for C++ that would enforce some of the rules in the C++ Core Guidelines. (A video of the talk is available [&hellip;]<\/p>\n","protected":false},"author":312,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[140,100,119,245,151,163],"class_list":["post-7301","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus","tag-c","tag-c-language","tag-code-analysis","tag-cppcorecheck","tag-iso-c","tag-static-analysis"],"acf":[],"blog_post_summary":"<p>[This post was written by\u00a0Andrew Pardoe and Neil MacIntosh] Update: The CppCoreCheck tools are now part of VS 2017:\u00a0https:\/\/blogs.msdn.microsoft.com\/vcblog\/2016\/10\/12\/cppcorecheck. Back in September at\u00a0CppCon 2015\u00a0Neil announced that we would be shipping new code analysis tools for C++ that would enforce some of the rules in the C++ Core Guidelines. (A video of the talk is available [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/7301","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\/312"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=7301"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/7301\/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=7301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=7301"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=7301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}