From 672406c746843a6585b52e74aef042c5d2945aa2 Mon Sep 17 00:00:00 2001 From: Taojunshen Date: Tue, 9 Nov 2021 02:42:28 +0800 Subject: [PATCH] 11/8/2021 AM Publish (#3888) * draft * updates * draft content * Change incorrect link for logical AND This commit changes the link for logical AND from incorrectly linking to the bitwise AND to the correct logical AND. * draft * acrolinx and add to toc * rename existing file back to original filename * tech review * fix code sample (#3676) * fix code sample * acrolinx Co-authored-by: TylerMSFT * Update fsanitize.md * Add mention in asan-building and add fsanitize-coverage options. * Expand /fsanitize=fuzzer description. Unify table format used on page. * Reference fsanitize-coverage.md in toc + full option lists. * Fix warnings * every relevant edge * Add OneFuzz mention * Fix mistaken deletion in chrono.md * Fpcontract docs (#3691) * Update fp-specify-floating-point-behavior.md Add details on /fp:contract flag * Update float-control.md Update float_control pragma behavior with respect to contractions. * small update * Update fenv-access.md * Update fp-contract.md * Update predefined-macros.md * fix typo and PR comments * leave definition of contractions * Add /fp:contract to the main list * fix line break * Add link to fp:contract * Add reference to fp:contract * Call out changes by compiler version. Co-authored-by: 3836425+corob-msft@users.noreply.github.com * Edit pass for i18n, grammar, and style * Respond to feedback * Add LibFuzzer link, consistency fixes * add new classes: ambiguous_local_time & nonexistent_local_time * acrolinx * fix links * finish descriptions * fix more links * smoothing out * proofing * add some better linking * tune description * update descriptions * needed to update local-info-struct.md to reflect changes to descriptions for nonexistent and ambiguous * add chrono functions * rounding out duration links * Add documentation for IntelliSense linter for C++ (#3821) * Add first draft of linter check documentation * WIP overview. Signed-off-by: Kyle Reed * Update toc. First draft of the linter overview. * Add screenshots, move files, code samples are stand-alone. Signed-off-by: Kyle Reed * Style and Acrolinx grammar checker pass * Add missing Options cues for checks * Update to use latest option names Co-authored-by: 3836425+corob-msft@users.noreply.github.com * connecting duration up to it's non-member pieces and doing some general updates * fix links * cleanup * Split out VS2019 content for linter (#3824) * Update working-with-project-properties.md * cleanup * cleanup * cleanup * cleanup * cleanup * cleanup * cleanup * fix function signature * fix line ending * remove duplicate * Address /profile issues per Paddy McD (#3834) * Fixed documentation that destroy dialogs * Update void-cpp for cpp-docs 3441 Reported in MicrosoftDocs/cpp-docs/issues/3441 Clarify kinds of class member where you can't use `void*`. Fix styles. Acrolinx a few things. * More clarity on void pointers to members * zoned_traits (#3831) * add zoned_traits * draft clock_cast and clock_time_conversion * first draft * draft * draft * fix heading * cleanup * add tzdb and tzdb-list * draft * draft * pull examples * draft cleanup * acrolinx * draft cleanup * draft cleanup * incorp tech review * tech review * cleanup * cleanup * acrolinx * fix casing * add example descriptions * wording * last adjustments * wording Co-authored-by: TylerMSFT * Update 16.1 conformance per J Emmett * Update docs/error-messages/compiler-errors-2/compiler-error-c2666.md * draft * acrolinx, links * links * Fix typo in page title * acrolinx * fix link * Fix TOC schema before VS2022 changes * cleanup the port * add additional info * Address 3449 typo in /analyze * update see also * Address 3462 add C5033 warning * Include link update * Typo * Add TOC entry * Update how-to-marshal-callbacks-and-delegates-by-using-cpp-interop.md typo: underlaying -> underlying * Fix typo in toc for tzdb_list * fix github issue #3469 (#3852) Co-authored-by: TylerMSFT * remove constexpr, prevent machine translation of code elements, and bring closer to current doc style (#3854) * remove constexpr * add remark * acrolinx * update casing * cleanup Co-authored-by: TylerMSFT * VS2022 update for what's new content * Acrolinx update * Fix validation, links, typos * Revert a styling quirk on headers * Validation error fix * Acrolinx and validation fixes * Conformance fix updates * Adding missing intrinsic. * Fix intrinsic signature. * Fix wrong argument type. * Add headers, requirements * VS2022 features, C17, walkthroughs (#3863) * VS2022 features, C17, walkthroughs * fix indentation to correct list step numbering * fix indentation to correct list step numbering * replace numbers with bold headings Co-authored-by: Beth Harvey * tech review feedback * cleanup * Frontrun bulk fixes for VS2022 * Fixes #3484 * Docs/corob/cpp docs 3481 d8049 (#3865) * Add D8049 error message * Acrolinx tweak * Update toc.yml fix apparent typo in TOC Co-authored-by: Jeff Borsecnik <36546697+jborsecnik@users.noreply.github.com> * More VS2022 non-bulk fixes. (#3867) * Bulk update VS2022 content (#3860) * Bulk fix to update msvc-160 and msvc-170 * Fix stray moniker tags * incorp review * update wording around closing the folder * typos * fix typo introduced while fixing typos... * update formatting * update steps and formatting * Update working-with-resource-files.md * Update symbols-resource-identifiers.md * Update how-to-create-a-resource-script-file.md If you right click on a class you can't add resources. You should right click on a project. * started draft of STL conformance items * Update CMake landing page (#3864) * intro, installation, configure * config notifications * IDE integration * Building CMake projects * Debugging CMake projects * Open an existing cache * Edit CMakeLists.txt files * Configure IntelliSense * Troubleshooting, repro from CLI * Switch 17/19 CLI sections * edits * Fix code block * more edits * move images from docs/media to docs/build/media * Address feedback * Fix link style * Final edits * fix spelling per Acrolinx Co-authored-by: Beth Harvey * finished first cut at VS 2022 17.0 STL conformance updates * Broken link fixed * move lwg-3518 to a c++11 section * De-emphasize codeplex archive * Add gray border (#3876) * tech review * remove LWG-* entries * Correct or remove links: validation issues * Update casting-c-cx.md * Update casting-c-cx.md * add vs 17.0 improvement summary for STL (#3883) * add vs 17.0 improvement summary for STL * wordsmithing * acrolinx * acrolinx * typo * fix caps * typo Co-authored-by: TylerMSFT * update what's new in the docs (#3881) * add what's new for Oct 2021 * acrolinx * acrolinx * tidy up * update through date * tidy up * acrolinx * typo * Apply suggestions from PR review Co-authored-by: TylerMSFT Co-authored-by: Shannon Leavitt * change STL name * Update install for VS2022 * Remove Preview text Co-authored-by: Colin Robertson Co-authored-by: TylerMSFT Co-authored-by: Weston McNamara Co-authored-by: Tyler Whitney Co-authored-by: Steve Wishnousky Co-authored-by: Gautham Beeraka <58992211+Gautham-Beeraka1@users.noreply.github.com> Co-authored-by: Kyle Reed Co-authored-by: Chai Wei Jie Co-authored-by: opbld15 Co-authored-by: PRMerger19 Co-authored-by: Laura Brenner <90344170+laurabren@users.noreply.github.com> Co-authored-by: Courtney Wales <62625502+Court72@users.noreply.github.com> Co-authored-by: Andrea Courtright <74212614+v-andreaco@users.noreply.github.com> Co-authored-by: PRMerger15 Co-authored-by: opbld16 Co-authored-by: PRMerger8 Co-authored-by: Anju Del Moral Gonzalez Co-authored-by: opbld17 Co-authored-by: Miya Natsuhara <46756417+mnatsuhara@users.noreply.github.com> Co-authored-by: Kristine Toliver Co-authored-by: PRMerger7 Co-authored-by: Avraham Co-authored-by: Paula Miller Co-authored-by: Jose Rivero Co-authored-by: Beth Harvey Co-authored-by: PRMerger5 Co-authored-by: Red Team Rover Co-authored-by: Jeff Borsecnik <36546697+jborsecnik@users.noreply.github.com> Co-authored-by: mohammad-ghasemi-2549 <82893849+mohammad-ghasemi-2549@users.noreply.github.com> Co-authored-by: Erika Co-authored-by: Atik Mapari (Lionbridge Technologies Inc) Co-authored-by: PRMerger Service account 2 Co-authored-by: Jaiganesh Kumaran Co-authored-by: PRMerger4 Co-authored-by: Shannon Leavitt Co-authored-by: PRMerger13 --- .whatsnew.json | 2 +- docs/build/vscpp-step-0-installation.md | 106 +++- docs/cppcx/casting-c-cx.md | 4 +- .../media/calc-vs2022-initial-dialog.png | Bin 0 -> 34466 bytes .../media/vs2022-installer-workloads.png | Bin 0 -> 101191 bytes docs/get-started/tutorial-console-cpp.md | 4 +- docs/overview/cpp-conformance-improvements.md | 4 +- docs/overview/toc.yml | 4 +- ...t-s-new-for-visual-cpp-in-visual-studio.md | 48 +- docs/overview/whats-new-cpp-docs.md | 539 ++++++++++-------- docs/standard-library/algorithm-functions.md | 47 +- docs/standard-library/any.md | 4 +- docs/standard-library/bit-functions.md | 66 +-- docs/standard-library/future-functions.md | 59 +- docs/standard-library/last-spec-struct.md | 10 +- docs/standard-library/local_t.md | 2 +- docs/standard-library/thread-class.md | 69 ++- 17 files changed, 589 insertions(+), 379 deletions(-) create mode 100644 docs/get-started/media/calc-vs2022-initial-dialog.png create mode 100644 docs/get-started/media/vs2022-installer-workloads.png diff --git a/.whatsnew.json b/.whatsnew.json index cefd025c948..6c3360626cc 100644 --- a/.whatsnew.json +++ b/.whatsnew.json @@ -7,7 +7,7 @@ "relativeLinkPrefix": "../" }, "inclusionCriteria": { - "minAdditionsToFile": 3, + "minAdditionsToFile": 2, "pullRequestTitlesToIgnore": [ "^Confirm merge from FromPublicMasterBranch", "^Repo sync for protected CLA branch" diff --git a/docs/build/vscpp-step-0-installation.md b/docs/build/vscpp-step-0-installation.md index 0fc6e1e719e..2cb19c7c0f9 100644 --- a/docs/build/vscpp-step-0-installation.md +++ b/docs/build/vscpp-step-0-installation.md @@ -2,7 +2,7 @@ title: Install C and C++ support in Visual Studio description: "Learn how to install Visual Studio with support for Microsoft C/C++ and related workloads." ms.custom: vs-acquisition, intro-installation -ms.date: 11/05/2020 +ms.date: 11/08/2021 ms.topic: "tutorial" ms.devlang: "cpp" ms.assetid: 45138d70-719d-42dc-90d7-1d0ca31a2f54 @@ -11,6 +11,110 @@ ms.assetid: 45138d70-719d-42dc-90d7-1d0ca31a2f54 If you haven't downloaded and installed Visual Studio and the Microsoft C/C++ tools yet, here's how to get started. +::: moniker range="msvc-170" + +## Visual Studio 2022 Installation + +Welcome to Visual Studio 2022! In this version, it's easy to choose and install just the features you need. And because of its reduced minimum footprint, it installs quickly and with less system impact. + +> [!NOTE] +> This topic applies to installation of Visual Studio on Windows. [Visual Studio Code](https://code.visualstudio.com/) is a lightweight, cross-platform development environment that runs on Windows, Mac, and Linux systems. The Microsoft [C/C++ for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) extension supports IntelliSense, debugging, code formatting, auto-completion. Visual Studio for Mac doesn't support Microsoft C++, but does support .NET languages and cross-platform development. For installation instructions, see [Install Visual Studio for Mac](/visualstudio/mac/installation/). + +Want to know more about what else is new in this version? See the Visual Studio [release notes](/visualstudio/releases/2022/release-notes/). + +Ready to install? We'll walk you through it, step-by-step. + +### Step 1 - Make sure your computer is ready for Visual Studio + +Before you begin installing Visual Studio: + +1. Check the [system requirements](/visualstudio/releases/2022/system-requirements). These requirements help you know whether your computer supports Visual Studio 2022. + +1. Apply the latest Windows updates. These updates ensure that your computer has both the latest security updates and the required system components for Visual Studio. + +1. Reboot. The reboot ensures that any pending installs or updates don't hinder the Visual Studio install. + +1. Free up space. Remove unneeded files and applications from your %SystemDrive% by, for example, running the Disk Cleanup app. + +For questions about running previous versions of Visual Studio side by side with Visual Studio 2022, see the [Visual Studio 2022 Platform Targeting and Compatibility](/visualstudio/releases/2022/compatibility/) page. + +### Step 2 - Download Visual Studio + +Next, download the Visual Studio bootstrapper file. To do so, choose the following button to go to the Visual Studio download page. Select the edition of Visual Studio that you want and choose the **Free trial** or **Free download** button. + + > [!div class="button"] + > [Download Visual Studio](https://visualstudio.microsoft.com/downloads/) + +### Step 3 - Install the Visual Studio installer + +Run the bootstrapper file you downloaded to install the Visual Studio Installer. This new lightweight installer includes everything you need to both install and customize Visual Studio. + +1. From your **Downloads** folder, double-click the bootstrapper that matches or is similar to one of the following files: + + - **vs_community.exe** for Visual Studio Community + - **vs_professional.exe** for Visual Studio Professional + - **vs_enterprise.exe** for Visual Studio Enterprise + + If you receive a User Account Control notice, choose **Yes** to allow the bootstrapper to run. + +1. We'll ask you to acknowledge the Microsoft [License Terms](https://visualstudio.microsoft.com/license-terms/) and the Microsoft [Privacy Statement](https://privacy.microsoft.com/privacystatement). Choose **Continue**. + +### Step 4 - Choose workloads + +After the installer is installed, you can use it to customize your installation by selecting the *workloads*, or feature sets, that you want. Here's how. + +1. Find the workload you want in the **Installing Visual Studio** screen. + + ![Visual Studio 2022: Install a workload.](../get-started/media/vs2022-installer-workloads.png) + + For core C and C++ support, choose the "Desktop development with C++" workload. It comes with the default core editor, which includes basic code editing support for over 20 languages, the ability to open and edit code from any folder without requiring a project, and integrated source code control. + + Additional workloads support other kinds of development. For example, choose the "Universal Windows Platform development" workload to create apps that use the Windows Runtime for the Microsoft Store. Choose "Game development with C++" to create games that use DirectX, Unreal, and Cocos2d. Choose "Linux development with C++" to target Linux platforms, including IoT development. + + The **Installation details** pane lists the included and optional components installed by each workload. You can select or deselect optional components in this list. For example, to support development by using the Visual Studio 2017 or 2015 compiler toolsets, choose the MSVC v141 or MSVC v140 optional components. You can add support for MFC, the experimental Modules language extension, IncrediBuild, and more. + +1. After you choose the workload(s) and optional components you want, choose **Install**. + + Next, status screens appear that show the progress of your Visual Studio installation. + +> [!TIP] +> At any time after installation, you can install workloads or components that you didn't install initially. If you have Visual Studio open, go to **Tools** > **Get Tools and Features...** which opens the Visual Studio Installer. Or, open **Visual Studio Installer** from the Start menu. From there, you can choose the workloads or components that you wish to install. Then, choose **Modify**. + +### Step 5 - Choose individual components (Optional) + +If you don't want to use the Workloads feature to customize your Visual Studio installation, or you want to add more components than a workload installs, you can do so by installing or adding individual components from the **Individual components** tab. Choose what you want, and then follow the prompts. + +### Step 6 - Install language packs (Optional) + +By default, the installer program tries to match the language of the operating system when it runs for the first time. To install Visual Studio in a language of your choosing, choose the **Language packs** tab from the Visual Studio Installer, and then follow the prompts. + + ![Screenshot of the Visual Studio Installer, showing the Install language packs tab view.](../get-started/media/vs-installer-language-packs.png) + +#### Change the installer language from the command line + +Another way that you can change the default language is by running the installer from the command line. For example, you can force the installer to run in English by using the following command: `vs_installer.exe --locale en-US`. The installer will remember this setting when it's run the next time. The installer supports the following language tokens: zh-cn, zh-tw, cs-cz, en-us, es-es, fr-fr, de-de, it-it, ja-jp, ko-kr, pl-pl, pt-br, ru-ru, and tr-tr. + +### Step 7 - Change the installation location (Optional) + +You can reduce the installation footprint of Visual Studio on your system drive. You can choose to move the download cache, shared components, SDKs, and tools to different drives, and keep Visual Studio on the drive that runs it the fastest. + +> [!IMPORTANT] +> You can select a different drive only when you first install Visual Studio. If you've already installed it and want to change drives, you must uninstall Visual Studio and then reinstall it. + +### Step 8 - Start developing + +1. After Visual Studio installation is complete, choose the **Launch** button to get started developing with Visual Studio. + +1. On the start window, choose **Create a new project**. + +1. In the search box, enter the type of app you want to create to see a list of available templates. The list of templates depends on the workload(s) that you chose during installation. To see different templates, choose different workloads. + + You can also filter your search for a specific programming language by using the **Language** drop-down list. You can filter by using the **Platform** list and the **Project type** list, too. + +1. Visual Studio opens your new project, and you're ready to code! + +::: moniker-end + ::: moniker range="msvc-160" ## Visual Studio 2019 Installation diff --git a/docs/cppcx/casting-c-cx.md b/docs/cppcx/casting-c-cx.md index c21d31e5ce7..0815789fc4b 100644 --- a/docs/cppcx/casting-c-cx.md +++ b/docs/cppcx/casting-c-cx.md @@ -50,7 +50,7 @@ Use safe_cast if the code does not declare the relationship but you are sure tha ## dynamic_cast -Use **`dynamic_cast`** when you cast an object (more specifically, a hat **^**) to a more derived type, you expect either that the target object might sometimes be **`nullptr`** or that the cast might fail, and you want to handle that condition as a regular code path instead of an exception. For example, in the **Blank App (Universal Windows)** project template, the `OnLaunched` method in app.xamp.cpp uses **`dynamic_cast`** to test whether the app window has content. It's not an error if it doesn’t have content; it is an expected condition. `Windows::Current::Content` is a `Windows::UI::XAML::UIElement` and the conversion is to a `Windows::UI.XAML::Controls::Frame`, which is a more derived type in the inheritance hierarchy. +Use **`dynamic_cast`** when you cast an object (more specifically, a hat **^**) to a more derived type, you expect either that the target object might sometimes be **`nullptr`** or that the cast might fail, and you want to handle that condition as a regular code path instead of an exception. For example, in the **Blank App (Universal Windows)** project template, the `OnLaunched` method in app.xaml.cpp uses **`dynamic_cast`** to test whether the app window has content. It's not an error if it doesn’t have content; it is an expected condition. `Windows::Current::Content` is a `Windows::UI::XAML::UIElement` and the conversion is to a `Windows::UI.XAML::Controls::Frame`, which is a more derived type in the inheritance hierarchy. ```cpp void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ args) @@ -87,7 +87,7 @@ ComPtr inspectable = reinterpret_cast(winRtObject); // ... ``` -If you use **`reinterpret_cast`** to convert from oneWindows Runtime interface to another, you cause the object to be released twice. Therefore, only use this cast when you are converting to a non-C++ component extensions interface. +If you use **`reinterpret_cast`** to convert from one Windows Runtime interface to another, you cause the object to be released twice. Therefore, only use this cast when you are converting to a non-C++ component extensions interface. ## ABI types diff --git a/docs/get-started/media/calc-vs2022-initial-dialog.png b/docs/get-started/media/calc-vs2022-initial-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..f37534789a8bc04d39c723328781eaf2ec5c0cd7 GIT binary patch literal 34466 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 literal 0 HcmV?d00001 diff --git a/docs/get-started/media/vs2022-installer-workloads.png b/docs/get-started/media/vs2022-installer-workloads.png new file mode 100644 index 0000000000000000000000000000000000000000..020d57cb6b5f07026bf2e0fd9eda73daa601442f GIT binary patch literal 101191 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 literal 0 HcmV?d00001 diff --git a/docs/get-started/tutorial-console-cpp.md b/docs/get-started/tutorial-console-cpp.md index b2f40505da8..22016a385b0 100644 --- a/docs/get-started/tutorial-console-cpp.md +++ b/docs/get-started/tutorial-console-cpp.md @@ -21,9 +21,9 @@ The usual starting point for a C++ programmer is a "Hello, world!" application t Visual Studio uses *projects* to organize the code for an app, and *solutions* to organize your projects. A project contains all the options, configurations, and rules used to build your apps. It also manages the relationship between all the project's files and any external files. To create your app, first, you'll create a new project and solution. -1. If you've just started Visual Studio, you'll see the Visual Studio 2019 dialog box. Choose **Create a new project** to get started. +1. If you've just started Visual Studio, you'll see the Visual Studio Start dialog box. Choose **Create a new project** to get started. - ![Screenshot of the Visual Studio 2019 initial dialog.](./media/calc-vs2019-initial-dialog.png "The Visual Studio 2019 initial dialog") + ![Screenshot of the Visual Studio 2022 initial dialog.](./media/calc-vs2022-initial-dialog.png) Otherwise, on the menubar in Visual Studio, choose **File** > **New** > **Project**. The **Create a new project** window opens. diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 850167a1c23..7fd93ff9073 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -10,9 +10,9 @@ Microsoft C/C++ in Visual Studio (MSVC) makes conformance improvements and bug f This document lists the changes in Visual Studio 2022. For a guide to the changes in Visual Studio 2019, see [C++ conformance improvements in Visual Studio 2019](cpp-conformance-improvements-2019.md). For changes in Visual Studio 2017, see [C++ conformance improvements in Visual Studio 2017](cpp-conformance-improvements-2017.md). For a complete list of previous conformance improvements, see [Visual C++ What's New 2003 through 2015](../porting/visual-cpp-what-s-new-2003-through-2015.md). -## Conformance improvements in Visual Studio 2022 Preview and RC (version 17.0) +## Conformance improvements in Visual Studio 2022 version 17.0 -Visual Studio 2022 Preview and RC version 17.0 contains the following conformance improvements, bug fixes, and behavior changes in the Microsoft C++ compiler. +Visual Studio 2022 version 17.0 contains the following conformance improvements, bug fixes, and behavior changes in the Microsoft C++ compiler. ### Warning on bitfield width for enumeration type diff --git a/docs/overview/toc.yml b/docs/overview/toc.yml index add88aa4c81..6835b304bd4 100644 --- a/docs/overview/toc.yml +++ b/docs/overview/toc.yml @@ -6,7 +6,7 @@ items: href: ../overview/visual-cpp-in-visual-studio.md - name: Overview of C++ development in Visual Studio href: ../overview/overview-of-cpp-development.md - - name: What's new for C++ in Visual Studio 2022 Preview + - name: What's new for C++ in Visual Studio 2022 href: ../overview/what-s-new-for-visual-cpp-in-visual-studio.md - name: What's new for C++ in Visual Studio 2019 href: ../overview/what-s-new-for-cpp-2019.md @@ -14,7 +14,7 @@ items: href: ../overview/what-s-new-for-cpp-2017.md - name: What's new for Microsoft C++ docs href: ../overview/whats-new-cpp-docs.md - - name: C++ conformance improvements in Visual Studio 2022 Preview + - name: C++ conformance improvements in Visual Studio 2022 href: ../overview/cpp-conformance-improvements.md - name: C++ conformance improvements in Visual Studio 2019 href: ../overview/cpp-conformance-improvements-2019.md diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index a293b4c334d..09fcc870be5 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -1,11 +1,11 @@ --- title: "What's new for C++ in Visual Studio" description: "The new features and fixes in the Microsoft C/C++ compiler and tools in Visual Studio." -ms.date: 10/22/2021 +ms.date: 11/05/2021 ms.technology: "cpp-ide" ms.custom: intro-whats-new --- -# What's new for C++ in Visual Studio 2022 Preview +# What's new for C++ in Visual Studio 2022 Visual Studio 2022 brings many updates and fixes to the Microsoft C++ environment. We've added features and fixed many bugs and issues in the compiler and tools. The Visual Studio IDE also offers significant improvements in performance and productivity, and now runs natively as a 64-bit application. For more information on what's new in all of Visual Studio, visit [What's new in Visual Studio 2022](/visualstudio/ide/whats-new-visual-studio-2022?view=vs-2022&preserve-view=true). For information about what's new in the C++ docs, see [Microsoft C++ docs: What's new](whats-new-cpp-docs.md). @@ -21,7 +21,11 @@ For a summary of new features and bug fixes in Visual Studio, see [What's New in ### Hot Reload for native C++ -- [Hot Reload for C++](https://devblogs.microsoft.com/cppblog/edit-your-c-code-while-debugging-with-hot-reload-in-visual-studio-2022/) makes it possible to make many types of code edits to your running app and apply them without needing to pause app execution with something like a breakpoint. We've improved the Hot Reload experience in the debugger and the underlying Edit and Continue mechanism. Hot Reload now supports CMake and OpenFolder projects. +- [Hot Reload for C++](https://devblogs.microsoft.com/cppblog/edit-your-c-code-while-debugging-with-hot-reload-in-visual-studio-2022/) makes it possible to make many types of code edits to your running app and apply them without needing to pause app execution with something like a breakpoint. + +In Visual Studio 2022, when you start your app in the debugger, you can use the Hot Reload button to modify your application while it's still running. This experience is powered by native Edit and Continue. For more information about supported edits, see [Edot and Continue (C++)](/visualstudio/debugger/edit-and-continue-visual-cpp?view=vs-2022&preserve-view=true). + +- Hot Reload supports CMake and Open Folder projects. ### WSL2 support @@ -41,6 +45,32 @@ For a summary of new features and bug fixes in Visual Studio, see [What's New in - Implemented the **`/scanDependencies`** compiler option to list C++20 module dependencies for CMake projects, as described in [P1689r3](https://wg21.link/P1689r3). It's a step towards support for building modules-based projects with CMake and we're working on completing this support in later releases. +### Standard Library improvements + +Select Standard Library (STL) improvements are highlighted here. For a comprehensive list of new functionality, changes, bug fixes, and performance improvements, see the STL team's [Changelog](https://github.com/microsoft/STL/wiki/Changelog#vs-2022). + +- Added debugging visualizers to improve how the following types are displayed: `source_location`, `bind_front()`, `u8string` (and its iterators), `default_sentinel_t`, `unreachable_sentinel_t`, `ranges::empty_view`, `ranges::single_view`, `ranges::iota_view` (and its iterator/sentinel), `ranges::ref_view`, `thread`, `thread::id`, `jthread`, and `filesystem::path` +- Added `[[nodiscard]]` to the `stoi()` family of functions in `` and to various functions in `` such as the `collate` member functions, `has_facet()`, and the `isalnum()` and `tolower()` families. +- [P0980R1](https://wg21.link/P0980R1) Made `std::string` `constexpr` in VS 2019 16.10. Now it's also supported for Clang. +- [P1004R2](https://wg21.link/P1004R2) Made `std::vector` `constexpr`in VS 2019 16.10. Now it's also supported for Clang. + +**Highlighted C++23 features** + +- [P1048R1](https://wg21.link/P1048R1) Added `is_scoped_enum`, a new trait for the C++ Standard library, which detects whether a type is a scoped enumeration. +- [P1132R7](https://wg21.link/P1132R7) `out_ptr()`, `inout_ptr()` +- [P1679R3](https://wg21.link/P1679R3) `contains()` For `basic_string` and `basic_string_view` +- [P1682R3](https://wg21.link/P1682R3) `to_underlying()` for enumerations +- [P2162R2](https://wg21.link/P2162R2) Allow inheriting from `std::variant` +- [P2166R1](https://wg21.link/P2166R1) Prohibit constructing`basic_string` and `basic_string_view` from `nullptr`. This is a source-breaking change. Code that previously had undefined behavior at runtime will now be rejected with compiler errors. +- [P2186R2](https://wg21.link/P2186R2) Removed garbage collection support. This removes `declare_reachable`, `undeclare_reachable`, `declare_no_pointers`, `undeclare_no_pointers`, `get_pointer_safety`. Previously, these functions had no effect. + +**Highlighted performance improvements** + +- `` now detects when it's writing to a `back_insert_iterator` for a `basic_string` or a `vector`, and makes a faster call to `insert()` at the `end()` of the container. +- Improved the performance of `std::find()` and `std::count()` for `vector` 19x and 26x (times, not percent). +- Improved the performance of `std::count()` for `vector` +- `std::byte` now has the same performance as `unsigned char` in `reverse()` and `variant::swap()` + ### Clang and LLVM support - LLVM tools shipped with Visual Studio have been upgraded to LLVM 12. For more information, see the [LLVM release notes](https://releases.llvm.org/12.0.0/docs/ReleaseNotes.html). @@ -63,7 +93,9 @@ For a summary of new features and bug fixes in Visual Studio, see [What's New in - C++ IntelliSense for CMake projects now works when using a preset with a display name. -- Updated to NDK r21 LTS in C++ Mobile Development workload. +### C++ Workload updates + +- Updated to NDK r21 LTS in the **C++ Mobile Development** workload. - The **Game development with C++** workload now installs the latest Unreal Engine with support with for Visual Studio 2022. @@ -79,11 +111,15 @@ For a summary of new features and bug fixes in Visual Studio, see [What's New in ## Release notes for older versions -Release notes for older C++ versions are also available. For information on what's new for C++ in Visual Studio 2019, see [What's new for C++ in Visual Studio 2019](what-s-new-for-cpp-2019.md). For information on what's new for C++ in Visual Studio 2017, see [What's new for C++ in Visual Studio 2017](what-s-new-for-cpp-2017.md). For information on what's new in earlier versions, see [Visual C++ What's New 2003 through 2015](../porting/visual-cpp-what-s-new-2003-through-2015.md). +Release notes for older C++ versions are also available. For information on what's new for C++ in Visual Studio 2019, see [What's new for C++ in Visual Studio 2019.](what-s-new-for-cpp-2019.md) For information on what's new for C++ in Visual Studio 2017, see [What's new for C++ in Visual Studio 2017.](what-s-new-for-cpp-2017.md) For information on what's new in earlier versions, see [Visual C++ What's New 2003 through 2015.](../porting/visual-cpp-what-s-new-2003-through-2015.md) ## Known issues -For more information on open issues and available workarounds for C++ in Visual Studio 2022, see the C++ Developer Community [issues list](https://developercommunity.visualstudio.com/search?space=62&stateGroup=active&ftype=problem&sort=votes&q=2022). +**C++ IntelliSense** + +- [When importing a C++20 module or header unit, IntelliSense may stop working or 'There are too many errors' error is shown](https://aka.ms/vcmoduleintellisenseinfo). + +For more information on other open issues and available workarounds for C++ in Visual Studio 2022, see the C++ Developer Community [issues list](https://developercommunity.visualstudio.com/search?space=62&stateGroup=active&ftype=problem&sort=votes&q=2022). ## Feedback and suggestions diff --git a/docs/overview/whats-new-cpp-docs.md b/docs/overview/whats-new-cpp-docs.md index 9f23d65c78d..df22fbac312 100644 --- a/docs/overview/whats-new-cpp-docs.md +++ b/docs/overview/whats-new-cpp-docs.md @@ -1,19 +1,301 @@ --- title: "What's new for the C++ docs" -ms.date: 7/9/2021 +ms.date: "11/5/2021" description: "The new docs and doc updates for the Microsoft C/C++ compiler, ATL/MFC, C runtime, and standard library docs." ms.custom: intro-whats-new --- -# Microsoft C++ docs: What's new for June 2021 +# Microsoft C++ docs: What's new for October 2021 -This article lists major changes to the Microsoft C++ docs through June 2021. +This article lists major changes to the Microsoft C++ docs July 2021 through October 2021. -- See [what's new history](#whats-new-history) for info about what was new in previous months. -- See [What's new for C++ in Visual Studio](what-s-new-for-visual-cpp-in-visual-studio.md) for info about what's new in Visual Studio. -- See [C++ conformance improvements in Visual Studio](cpp-conformance-improvements.md) for the latest C and C++ conformance status. +- For what was new in the docs in previous months, see [What's new history](#whats-new-history). +- For what's new related to C++ in Visual Studio, see [What's new for C++ in Visual Studio](what-s-new-for-visual-cpp-in-visual-studio.md). +- For the latest C and C++ conformance with ISO standards status, see [C++ conformance improvements in Visual Studio](cpp-conformance-improvements.md). -## Build insights +## Active Template Library (ATL), Microsoft Foundation Classes (MFC) + +### Updated articles + +- [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) - updated code examples and added code example output +- [MFC class hierarchy chart](../mfc/hierarchy-chart.md) - Update MFC hierarchy chart + +## C language + +### New articles + +- [Generic selection (C11)](../c-language/generic-selection.md) + +### Updated articles + +- [`register` storage-class specifier](../c-language/register-storage-class-specifier.md) - Add C5033 warning +- [C Pragmas](../c-language/c-pragmas.md) - Add system_header pragma documentation +- [C Bit Fields](../c-language/c-bit-fields.md) - Clarify int main(void) example & document MSVC doesn't straddle bit-fields + +## C runtime library + +### Updated articles + +- [CRT Initialization](../c-runtime-library/crt-initialization.md) - Add 16.11 Compiler warnings C5247 and C5248 +- [`rand`](../c-runtime-library/reference/rand.md) - Update code example +- [`wcstombs_s`, `_wcstombs_s_l`](../c-runtime-library/reference/wcstombs-s-wcstombs-s-l.md) - Update code example +- [_get_errno](../c-runtime-library/reference/get-errno.md) - Update code example + +## C/C++ compiler and tools errors and warnings + +### New articles + +- [Command-line error D8049](../error-messages/tool-errors/command-line-error-d8049.md) +- [Compiler Warning C5243](../error-messages/compiler-warnings/c5243.md) +- [Compiler Warning C5247](../error-messages/compiler-warnings/c5247.md) +- [Compiler Warning C5248](../error-messages/compiler-warnings/c5248.md) +- [Compiler Warning (level 1) C5033](../error-messages/compiler-warnings/c5033.md) + +### Updated articles + +- [Command-line errors and warnings](../error-messages/tool-errors/command-line-errors-d8000-through-d9999.md) - new error messages +- [Compiler Warning (level 4) C4710](../error-messages/compiler-warnings/compiler-warning-level-4-c4710.md) - Add C5033 warning +- [Compiler Warnings C4800 through C5999](../error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md) - Add compiler warning C5033, C5243, C5249, C5250, C5247, and C5248. +- [Compiler Error C2666](../error-messages/compiler-errors-2/compiler-error-c2666.md) - Update 16.1 conformance +- [Compiler Warning (level 4) C4702](../error-messages/compiler-warnings/compiler-warning-level-4-c4702.md) - Update warning C4702 +- [Compiler Error C2440](../error-messages/compiler-errors-1/compiler-error-c2440.md) - Add `/Zc:char8_t` compiler option +- [Compiler Error C2760](../error-messages/compiler-errors-2/compiler-error-c2760.md) - New `/Zc:lambda` info +- [Compiler Error C2259](../error-messages/compiler-errors-1/compiler-error-c2259.md) - Update code example + +## C/C++ compiler intrinsics and assembly language + +### New articles + +- [MASM instruction format](../assembler/masm/instruction-format.md) +- [OPTION AVXENCODING](../assembler/masm/option-avxencoding-masm.md) +- [OPTION LANGUAGE](../assembler/masm/option-language-masm.md) + +### Updated articles + +- [MASM for x64 (ml64.exe)](../assembler/masm/masm-for-x64-ml64-exe.md) - Document MASM instruction format including prefixes and option avxencoding +- [Microsoft Macro Assembler reference](../assembler/masm/microsoft-macro-assembler-reference.md) - Document MASM instruction format including prefixes and option avxencoding +- [`OPTION`](../assembler/masm/option-masm.md) - Document MASM instruction format including prefixes and option avxencoding +- [_InterlockedCompareExchange intrinsic functions](../intrinsics/interlockedcompareexchange-intrinsic-functions.md) - Adding missing interlocked intrinsic and fixing another interlock intrinsic return type + +## C/C++ in Visual Studio overview + +### New articles + +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2019](../overview/cpp-conformance-improvements-2019.md) +- [What's new for C++ in Visual Studio 2019](../overview/what-s-new-for-cpp-2019.md) + +### Updated articles + +- [Overview of C++ development in Visual Studio](../overview/overview-of-cpp-development.md) - Visual Studio 2022 related updates. +- [Install C11 and C17 support in Visual Studio](../overview/install-c17-support.md) - Visual Studio 2022 related updates, C17 updates +- [C++ Tools and Features in Visual Studio Editions](../overview/visual-cpp-tools-and-features-in-visual-studio-editions.md) - Visual Studio 2022 related updates, C17 updates +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - Visual Studio 2022 and 16.1 conformance updates +- [Microsoft C/C++ language conformance by Visual Studio version](../overview/visual-cpp-language-conformance.md) - Visual Studio 2022 related updates +- [C and C++ in Visual Studio](../overview/visual-cpp-in-visual-studio.md) - Add missing redist content + +## C/C++ preprocessor reference + +### New articles + +- [`system_header` pragma](../preprocessor/system-header-pragma.md) + +### Updated articles + +- [`fenv_access` pragma](../preprocessor/fenv-access.md) - Add floating-point *contractions* info +- [`float_control` pragma](../preprocessor/float-control.md) - Add floating-point *contractions* info +- [`fp_contract` pragma](../preprocessor/fp-contract.md) - Add floating-point *contractions* info +- [Predefined macros](../preprocessor/predefined-macros.md) - Add `__SANITIZE_ADDRESS__` and `_M_FP_CONTRACT` +- [Compiler warnings that are off by default](../preprocessor/compiler-warnings-that-are-off-by-default.md) - Add compiler warning C5243, C5249, C5250, C5247, and C5248 + +## C/C++ projects and build systems + +### New articles + +- [`/Zc:char8_t` (Enable C++20 char8_t type)](../build/reference/zc-char8-t.md) +- [`/Zc:lambda` (Enable updated lambda processor)](../build/reference/zc-lambda.md) +- [`/fsanitize-coverage` (Configure sanitizer coverage)](../build/reference/fsanitize-coverage.md) +- [`abspath` NMAKE function](../build/reference/nmake-function-abspath.md) +- [`basename` NMAKE function](../build/reference/nmake-function-basename.md) +- [`filter`, `filteri` NMAKE functions](../build/reference/nmake-function-filter.md) +- [`filterout`, `filterouti` NMAKE functions](../build/reference/nmake-function-filterout.md) +- [`findstring`, `findstringi` NMAKE functions](../build/reference/nmake-function-findstring.md) +- [`patsubst`, `patsubsti` NMAKE functions](../build/reference/nmake-function-patsubst.md) +- [`strip` NMAKE function](../build/reference/nmake-function-strip.md) +- [`subst`, `substi` NMAKE functions](../build/reference/nmake-function-subst.md) +- [Walkthrough: Build and debug C++ with WSL 2 and Visual Studio 2022](../build/walkthrough-build-debug-wsl2.md) + +### Updated articles + +- [Configure and build with CMake Presets in Visual Studio](../build/cmake-presets-vs.md) - Fix inconsistencies and add documentation about the "unspecified" architecture feature +- [Clang/LLVM support in Visual Studio CMake projects](../build/clang-support-cmake.md) - Clarified version-specific installation +- [CMake projects in Visual Studio](../build/cmake-projects-in-visual-studio.md) - Fix inconsistencies in CMake docs and add docs on using existing cache without cmake-server +- [/fp (Specify floating-point behavior)](../build/reference/fp-specify-floating-point-behavior.md) - Fix `/fp` sample code +- [`/Og` (Global Optimizations)](../build/reference/og-global-optimizations.md) - Clarify when the **`register`** keyword is ignored +- [`/PROFILE` (Performance Tools Profiler)](../build/reference/profile-performance-tools-profiler.md) - Address `/profile` issues +- [Use the Microsoft C++ toolset from the command line](../build/building-on-the-command-line.md) - Fix MSBuild recommendation & update C/C++ workload name +- [Use an NMAKE macro](../build/reference/using-an-nmake-macro.md) - Add documentation for the new NMAKE functions +- [Commands in a makefile](../build/reference/commands-in-a-makefile.md) - Combine and update NMAKE docs +- [NMAKE makefile contents and features](../build/reference/contents-of-a-makefile.md) - Combine and update NMAKE docs +- [Create a C++ makefile project](../build/reference/creating-a-makefile-project.md) - Combine and update NMAKE docs +- [Define an NMAKE macro](../build/reference/defining-an-nmake-macro.md) - Combine and update NMAKE docs +- [Dot directives](../build/reference/dot-directives.md) - Combine and update NMAKE docs +- [Inference rules](../build/reference/inference-rules.md) - Combine and update NMAKE docs +- [Inline files in a makefile](../build/reference/inline-files-in-a-makefile.md) - Combine and update NMAKE docs +- [Makefile Preprocessing](../build/reference/makefile-preprocessing.md) - Combine and update NMAKE docs +- [NMAKE Reference](../build/reference/nmake-reference.md) - Combine and update NMAKE docs +- [Running NMAKE](../build/reference/running-nmake.md) - Combine and update NMAKE docs +- [Sample Makefile](../build/reference/sample-makefile.md) - Combine and update NMAKE docs +- [Special NMAKE macros](../build/reference/special-nmake-macros.md) - Combine and update NMAKE docs +- [Configuring Programs for Windows XP](../build/configuring-programs-for-windows-xp.md) - Link updates for new redist article +- [`/Zc` (Conformance)](../build/reference/zc-conformance.md) - New `/Zc:lambda` information +- [`/Zc:__cplusplus` (Enable updated `__cplusplus` macro)](../build/reference/zc-cplusplus.md) - New `/Zc:lambda` information +- [CMake predefined build configurations](../build/cmake-predefined-configuration-reference.md) - Fix inconsistencies in CMake docs +- [`CMakePresets.json` and `CMakeUserPresets.json` Microsoft vendor maps](../build/cmake-presets-json-reference.md) - Fix inconsistencies in CMake docs +- [Tutorial: Debug a CMake project on a remote Windows machine](../build/cmake-remote-debugging.md) - Fix inconsistencies in CMake docs +- [`CMakeSettings.json` schema reference](../build/cmakesettings-reference.md) - Fix inconsistencies in CMake docs +- [`launch.vs.json` schema reference (C++)](../build/launch-vs-schema-reference-cpp.md) - add debugInfo macro definitions +- [`/external` (External headers diagnostics)](../build/reference/external-external-headers-diagnostics.md) - Add `system_header` pragma doc +- [DUMPBIN Reference](../build/reference/dumpbin-reference.md) - Setting `PATH` allows `DUMPBIN` to be executed from the command prompt +- [/Qspectre](../build/reference/qspectre.md) - Clarified `/Qspectre` Required Libraries section + +## C++ in Visual Studio + +### Updated articles + +- [Storage classes](../cpp/storage-classes-cpp.md) - Add C5033 warning +- [void (C++)](../cpp/void-cpp.md) - Clarify overall article +- [Labeled statements](../cpp/labeled-statements.md) - Correct labeled statements +- [Brace initialization](../cpp/initializing-classes-and-structs-without-constructors-cpp.md) - Address sanitizer comment location +- [Member Access Control (C++)](../cpp/member-access-control-cpp.md) - Update static member access in example +- [String and character literals (C++)](../cpp/string-and-character-literals-cpp.md) - Updates for C++20 portable **`char8_t`**. +- [Declarations and definitions (C++)](../cpp/declarations-and-definitions-cpp.md) - fix code sample +- [Template Specialization (C++)](../cpp/template-specialization-cpp.md) - update code example + +## C++ in Visual Studio tutorials + +### Updated articles + +- [Create a console calculator in C++](../get-started/tutorial-console-cpp.md) - add Git source control info to the tutorial + +## C++ porting and upgrade guide + +### Updated articles + +- [C++ binary compatibility between Visual Studio versions](../porting/binary-compat-2015-2017.md) - Update version info + +## C++ Standard Library (STL) + +### New articles + +- [`ambiguous_local_time` class](../standard-library/ambiguous-local-time.md) +- [`choose` enum](../standard-library/choose-enum.md) +- [`clock_time_conversion` struct](../standard-library/clock-time-conversion-struct.md) +- [`file_clock` class](../standard-library/file-clock-class.md) +- [`gps_clock` class](../standard-library/gps-clock-class.md) +- [`is_clock` structure](../standard-library/is-clock-struct.md) +- [`last_spec` struct](../standard-library/last-spec-struct.md) +- [`local_info` struct](../standard-library/local-info-struct.md) +- [`local_t` struct](../standard-library/local_t.md) +- [`nonexistent_local_time` class](../standard-library/nonexistent-local-time.md) +- [`sys_info` struct](../standard-library/sys-info-struct.md) +- [`tai_clock` class](../standard-library/tai-clock-class.md) +- [`time_zone_link` class](../standard-library/time-zone-link-class.md) +- [`tzdb_list` class](../standard-library/tzdb-list-class.md) +- [`tzdb` struct](../standard-library/tzdb-struct.md) +- [`utc_clock` class](../standard-library/utc-clock-class.md) +- [`zoned_time` class](../standard-library/zoned-time-class.md) +- [`zoned_traits` struct](../standard-library/zoned-traits-struct.md) + +### Updated articles + +- [`` functions](../standard-library/chrono-functions.md) - added new `` functions +- [``](../standard-library/chrono.md) - added new `` types +- [`duration` class](../standard-library/duration-class.md) - overall article update and linking to related non-member functions +- [Using Insertion Operators and Controlling Format](../standard-library/using-insertion-operators-and-controlling-format.md) - fix `setw` code example +- [`` operators](../standard-library/chrono-operators.md) - Added new C++20 chrono operators +- [`local_info` struct](../standard-library/local-info-struct.md) - updated descriptions for errors +- [`time_zone` class](../standard-library/time-zone-class.md) - article clarifications +- [`any` class](../standard-library/any-class.md) - Added requirements section +- [`` functions](../standard-library/any-functions.md) - Added requirements section +- [`bad_any_cast` class](../standard-library/bad-any-cast-class.md) - Added requirements section +- [domain_error Class](../standard-library/domain-error-class.md) - Improve `` documentation and examples +- [invalid_argument Class](../standard-library/invalid-argument-class.md) - Improve `` documentation and examples +- [length_error Class](../standard-library/length-error-class.md) - Improve `` documentation and examples +- [logic_error Class](../standard-library/logic-error-class.md) - Improve `` documentation and examples +- [out_of_range Class](../standard-library/out-of-range-class.md) - Improve `` documentation and examples +- [overflow_error Class](../standard-library/overflow-error-class.md) - Improve `` documentation and examples +- [range_error Class](../standard-library/range-error-class.md) - Improve `` documentation and examples +- [runtime_error Class](../standard-library/runtime-error-class.md) - Improve `` documentation and examples +- [underflow_error Class](../standard-library/underflow-error-class.md) - Improve `` documentation and examples +- [`filesystem`](../standard-library/filesystem.md) - `` no longer includes `` +- [Output File Stream Member Functions](../standard-library/output-file-stream-member-functions.md) - fixed code example +- [`` functions](../standard-library/bit-functions.md) - Fixed code example +- [``](../standard-library/execution.md) - Mention limits of concurrency +- [`` functions](../standard-library/future-functions.md) - Mention limits of concurrency +- [`thread` Class](../standard-library/thread-class.md) - Mention limits of concurrency + +## Overview of Windows programming in C++ + +### New articles + +- [Microsoft Visual C++ Redistributable Latest Supported Downloads](../windows/latest-supported-vc-redist.md) + +### Updated articles + +- [Walkthrough: Create a traditional Windows Desktop application (C++)](../windows/walkthrough-creating-windows-desktop-applications-cpp.md) - updated examples + +## Read and write code using C++ in Visual Studio + +### New articles + +- [IntelliSense code linter for C++ overview](../ide/cpp-linter-overview.md) +- [`lnt-assignment-equality`](../ide/lnt-assignment-equality.md) +- [`lnt-integer-float-division`](../ide/lnt-integer-float-division.md) +- [`lnt-accidental-copy`](../ide/lnt-accidental-copy.md) +- [`lnt-arithmetic-overflow`](../ide/lnt-arithmetic-overflow.md) +- [`lnt-logical-bitwise-mismatch`](../ide/lnt-logical-bitwise-mismatch.md) +- [`lnt-uninitialized-local`](../ide/lnt-uninitialized-local.md) + +### Updated articles + +- [`lnt-integer-float-division`](../ide/lnt-integer-float-division.md) - Add Visual Studio 2022 specific config information + +## STL/CLR library reference + +### Updated articles + +- [.NET programming with C++/CLI](../dotnet/dotnet-programming-with-cpp-cli-visual-cpp.md) - updated instructions for Visual Studio version UI differences + +## Community contributors + +The following people contributed to the C++, C, and Assembler docs during this period. Thank you! See [Microsoft Docs contributor guide overview](/contribute/) if you'd like to learn how to contribute. + +- [mohammad-ghasemi-2549](https://github.com/mohammad-ghasemi-2549) (5) +- [Jaiganeshkumaran](https://github.com/Jaiganeshkumaran) - Jaiganesh Kumaran (2) +- [workingjubilee](https://github.com/workingjubilee) - Jubilee (2) +- [adr26](https://github.com/adr26) (1) +- [AlexGuteniev](https://github.com/AlexGuteniev) - Alex Guteniev (1) +- [AzAgarampur](https://github.com/AzAgarampur) - Arush Agarampur (1) +- [d-c-d](https://github.com/d-c-d) - David Dyck (1) +- [onihusube](https://github.com/onihusube) (1) +- [rayz-bee](https://github.com/rayz-bee) - rayz-bee (1) +- [redteamrover](https://github.com/redteamrover) (1) +- [RibShark](https://github.com/RibShark) (1) +- [sauparna](https://github.com/sauparna) - Sauparna Palchowdhury (1) +- [sudoerChris](https://github.com/sudoerChris) - Chris Ho (1) +- [thispsj](https://github.com/thispsj) - PSJ (1) +- [Veverke](https://github.com/Veverke) - Avraham (1) +- [weijiechai](https://github.com/weijiechai) - Chai Wei Jie (1) +- [wmcnamara](https://github.com/wmcnamara) - Weston McNamara (1) +- [ystamant](https://github.com/ystamant) (1) + +## What's new history + +The following section provides the previous update of what's new in the Visual Studio docs. + +### June 2021 + +#### Build insights **New articles** @@ -29,7 +311,7 @@ This article lists major changes to the Microsoft C++ docs through June 2021. - [C++ Build Insights SDK: event table](../build-insights/reference/sdk/event-table.md) - add new C++ Build Insights events - [Get started with C++ Build Insights](../build-insights/get-started-with-cpp-build-insights.md) - add new C++ Build Insights events -## C language +#### C language **Updated articles** @@ -37,11 +319,11 @@ This article lists major changes to the Microsoft C++ docs through June 2021. - [Alignment (C11)](../c-language/alignment-c.md) - update the SDK to use - [Generic selection (C11)](../c-language/generic-selection.md) - update the SDK to use -## C runtime library +#### C runtime library **Updated articles** -In addition to the changes below, many articles were updated to prevent the machine translation of code elements. +Many articles were updated to prevent the machine translation of code elements. - [`_cprintf_p, _cprintf_p_l, _cwprintf_p, _cwprintf_p_l`](../c-runtime-library/reference/cprintf-p-cprintf-p-l-cwprintf-p-cwprintf-p-l.md) - `printf()` rounding behavior change - [`_cprintf_s, _cprintf_s_l, _cwprintf_s, _cwprintf_s_l`](../c-runtime-library/reference/cprintf-s-cprintf-s-l-cwprintf-s-cwprintf-s-l.md) - `printf()` rounding behavior change @@ -73,7 +355,7 @@ In addition to the changes below, many articles were updated to prevent the mach - [`vprintf, _vprintf_l, vwprintf, _vwprintf_l`](../c-runtime-library/reference/vprintf-vprintf-l-vwprintf-vwprintf-l.md) - `printf()` rounding behavior change - [`vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l`](../c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md) - `printf()` rounding behavior change -## C++ in Visual Studio +#### C++ in Visual Studio **Updated articles** @@ -82,14 +364,14 @@ In addition to the changes below, many articles were updated to prevent the mach - [Attributes in C++](../cpp/attributes.md) - add missing errors and warnings: C7000-C7999, C4834 - [char, wchar_t, char8_t, char16_t, char32_t](../cpp/char-wchar-t-char16-t-char32-t.md) - clarified whether char is signed or unsigned -## C++ porting and upgrade guide +#### C++ porting and upgrade guide **Updated articles** - [Introduction to Microsoft C++ for UNIX Users](../porting/introduction-to-visual-cpp-for-unix-users.md) - Visual Studio 16.10 updates to C17 conformance - [Visual C++ What's New 2003 through 2015](../porting/visual-cpp-what-s-new-2003-through-2015.md) - note change to `pow(T,int)` starting in VS 2015 update 1 -## C/C++ compiler and tools errors and warnings +#### C/C++ compiler and tools errors and warnings **New articles** @@ -126,13 +408,13 @@ In addition to the changes below, many articles were updated to prevent the mach - [Compiler warnings C4800 through C5999](../error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md) - update Visual Studio 16.10 conformance improvements and new warnings; add new 16.10 warnings, version info; added some version 2017 diagnostics; add missing errors and warnings: C7000 - C7999, C4834 - [Vectorizer and parallelizer messages](../error-messages/tool-errors/vectorizer-and-parallelizer-messages.md) - add vectorizer failure reason 505; add 1204 reason code -## C/C++ compiler intrinsics and assembly language +#### C/C++ compiler intrinsics and assembly language **Updated articles** - [Microsoft Macro Assembler BNF Grammar](../assembler/masm/masm-bnf-grammar.md) - cleanup formatting and machine translation issues -## C/C++ in Visual Studio overview +#### C/C++ in Visual Studio overview **New articles** @@ -150,14 +432,14 @@ In addition to the changes below, many articles were updated to prevent the mach - [Microsoft C++ docs: What's new for Visual Studio 16.8](../overview/whats-new-cpp-docs.md) - Visual Studio 16.10 updates to C17 conformance - [What's new for C++ in Visual Studio 2017](../overview/what-s-new-for-cpp-2017.md) - Visual Studio 16.10 updates to C17 conformance; update Visual Studio 16.9 release conformance docs -## C/C++ preprocessor reference +#### C/C++ preprocessor reference **Updated articles** - [Compiler warnings that are off by default](../preprocessor/compiler-warnings-that-are-off-by-default.md) - update Visual Studio 16.10 conformance improvements and new warnings; added some version 2017 diagnostics - [Predefined macros](../preprocessor/predefined-macros.md) - add new Visual Studio 16.10 warnings, version info; update version strings for Visual Studio 16.8, 16.9, and 16.10 -## C/C++ projects and build systems +#### C/C++ projects and build systems **New articles** @@ -213,7 +495,7 @@ In addition to the changes below, many articles were updated to prevent the mach - [Walkthrough: Compile a C program on the command line](../build/walkthrough-compile-a-c-program-on-the-command-line.md) - Visual Studio 16.10 updates to C17 conformance - [Walkthrough: Compiling a Native C++ Program on the Command Line](../build/walkthrough-compiling-a-native-cpp-program-on-the-command-line.md) - clarified notepad behavior when opening source file -## C++ Standard Library (STL) reference +#### C++ Standard Library (STL) reference **New articles** @@ -230,7 +512,7 @@ In addition to the changes below, many articles were updated to prevent the mach - [`bitset` class](../standard-library/bitset-class.md) - improve readability - [`vector` class](../standard-library/vector-class.md) - fix typo in code sample -## Code quality +#### Code quality **New articles** @@ -242,27 +524,27 @@ In addition to the changes below, many articles were updated to prevent the mach - [C26432 DEFINE_OR_DELETE_SPECIAL_OPS](../code-quality/c26432.md) - update code examples - [C26497 USE_CONSTEXPR_FOR_FUNCTION](../code-quality/c26497.md) - add note about when warning won't be issued -## Linux with C++ in Visual Studio +#### Linux with C++ in Visual Studio **Updated articles** - [Connect to your target Linux system in Visual Studio](../linux/connect-to-your-remote-linux-computer.md) - add section about host key verification - [ConnectionManager reference](../linux/connectionmanager-reference.md) - add note about host key fingerprint flags added in Visual Studio 16.10. -## Overview of Windows programming in C++ +#### Overview of Windows programming in C++ **Updated articles** - [Determining Which DLLs to Redistribute](../windows/determining-which-dlls-to-redistribute.md) - updated for Visual Studio 2019 -## Parallel programming in C++ in Visual Studio +#### Parallel programming in C++ in Visual Studio **Updated articles** - [C++ AMP Overview](../parallel/amp/cpp-amp-overview.md) - add note about C++ AMP library deprecation - [Walkthrough: Debugging a C++ AMP application](../parallel/amp/walkthrough-debugging-a-cpp-amp-application.md) - fixed code sample -## Community contributors +#### Community contributors The following people contributed to the C++, C, and Assembler docs during this period. Thank you! See [Microsoft Docs contributor guide overview](/contribute/) if you'd like to learn how to contribute. @@ -295,213 +577,4 @@ The following people contributed to the C++, C, and Assembler docs during this p - [tjs137](https://github.com/tjs137) (1) - [urmyfaith](https://github.com/urmyfaith) - zx (1) - [ValZapod](https://github.com/ValZapod) - Valerii Zapodovnikov (1) -- [westinn](https://github.com/westinn) - Nicolas Westin (1) - -## What's new history - -The following section provides the previous months of what's new in the Visual Studio docs. - -### February 2021 - -#### C language - -**New articles** - -- [`_Noreturn` keyword and `noreturn` macro (C11)](../c-language/noreturn.md) -- [`_Static_assert` keyword and `static_assert` macro (C11)](../c-language/static-assert-c.md) - -**Updated articles** - -- [C Assignment Operators](../c-language/c-assignment-operators.md) - lexical grammar update for C17 -- [C enumeration declarations](../c-language/c-enumeration-declarations.md) - fixed lexical grammar -- [C Keywords](../c-language/c-keywords.md) - lexical grammar update for C17 -- [C Lexical grammar](../c-language/lexical-grammar.md) - lexical grammar update for C17 -- [Parsing C Command-Line Arguments](../c-language/parsing-c-command-line-arguments.md) - Document exceptions to the rules for parsing C arguments -- [Summary of C statements](../c-language/summary-of-statements.md) - updated for `__leave`, `__try` keywords -- [Summary of Declarations](../c-language/summary-of-declarations.md) - lexical grammar update for C17 -- [Summary of Expressions](../c-language/summary-of-expressions.md) - lexical grammar update for C17 -- [Type Qualifiers](../c-language/type-qualifiers.md) - added `restrict` - -#### C runtime library - -**New articles** - -- [Type-generic math](../c-runtime-library/tgmath.md) - -**Updated articles** - -- [`_cwait`](../c-runtime-library/reference/cwait.md) - fixed code example -- [`assert Macro, _assert, _wassert`](../c-runtime-library/reference/assert-macro-assert-wassert.md) - Clarified assert behavior -- [`qsort`](../c-runtime-library/reference/qsort.md) - added note about stability -- [`realloc`](../c-runtime-library/reference/realloc.md) - added C99 conformance notes -- [`round, roundf, roundl`](../c-runtime-library/reference/round-roundf-roundl.md) - Clarified rounding code example -- [`setlocale, _wsetlocale`](../c-runtime-library/reference/setlocale-wsetlocale.md) - added C Runtime UTF-8 support info -- [`vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l`](../c-runtime-library/reference/vsnprintf-s-vsnprintf-s-vsnprintf-s-l-vsnwprintf-s-vsnwprintf-s-l.md) - Clarified return values -- [Compatibility](../c-runtime-library/compatibility.md) - added C99 conformance notes -- [CRT Library Features](../c-runtime-library/crt-library-features.md) - added C99 conformance notes -- [Function family overview](../c-runtime-library/function-family-overviews.md) - added operator `new` and `delete` - -#### C/C++ preprocessor reference - -**Updated articles** - -- [MSVC new preprocessor overview](../preprocessor/preprocessor-experimental-overview.md) - updated preprocessor content -- [Predefined macros](../preprocessor/predefined-macros.md) - updated to Visual Studio 16.8 release notes, C11/C17 `/std` support and SDK install docs - -#### Code quality - -**New articles** - -- [C33001](../code-quality/c33001.md) - VC Code Analysis - add for new rules in Visual Studio 16.8 -- [C33004](../code-quality/c33004.md) - VC Code Analysis - add for new rules in Visual Studio 16.8 -- [C33005](../code-quality/c33005.md) - VC Code Analysis - add for new rules in Visual Studio 16.8 -- [C33010](../code-quality/c33010.md) - VC Code Analysis - add for new rules in Visual Studio 16.8 -- [C33011](../code-quality/c33011.md) - VC Code Analysis - add for new rules in Visual Studio 16.8 -- [C33020](../code-quality/c33020.md) - VC Code Analysis - add for new rules in Visual Studio 16.8 -- [C33022](../code-quality/c33022.md) - VC Code Analysis - add for new rules in Visual Studio 16.8 - -**Updated articles** - -- [`C6262`](../code-quality/c6262.md) - address cpp-docs.zh-tw issue 20 -- [`C26401 DONT_DELETE_NON_OWNER`](../code-quality/c26401.md) - added example and Core Guidelines link to C26401 -- [`C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT`](../code-quality/c26402.md) - added example for C26402 -- [`C26408 NO_MALLOC_FREE`](../code-quality/c26408.md) - added example and Core Guidelines link to C26408 -- [`C26409 NO_NEW_DELETE`](../code-quality/c26409.md) - added example for C26409 -- [`C26432 DEFINE_OR_DELETE_SPECIAL_OPS`](../code-quality/c26432.md) - added example for C26432 -- [`C26434 DONT_HIDE_METHODS`](../code-quality/c26434.md) - added example for C26434 -- [`C26436 NEED_VIRTUAL_DTOR`](../code-quality/c26436.md) - added example and Core Guidelines link to C26436 -- [`C26439 SPECIAL_NOEXCEPT`](../code-quality/c26439.md) - added example and link to Core Guidelines for C26439 -- [`C26440 DECLARE_NOEXCEPT`](../code-quality/c26440.md) - added example and link to Core Guidelines for C26440 -- [`C26446 USE_GSL_AT`](../code-quality/c26446.md) - added an example for C26446 -- [`C26447 DONT_THROW_IN_NOEXCEPT`](../code-quality/c26447.md) - adding example to C26447 -- [`C26460 USE_CONST_REFERENCE_ARGUMENTS`](../code-quality/c26460.md) - added description and example to C26460 -- [`C26461 USE_CONST_POINTER_ARGUMENTS:`](../code-quality/c26461.md) - added description and example to C26461 -- [`C26462 USE_CONST_POINTER_FOR_VARIABLE`](../code-quality/c26462.md) - added description and example to C26462 -- [`C26465 NO_CONST_CAST_UNNECESSARY`](../code-quality/c26465.md) - added example to C26465 -- [`C26466 NO_STATIC_DOWNCAST_POLYMORPHIC`](../code-quality/c26466.md) - added Example to C26466 -- [`C26471 NO_REINTERPRET_CAST_FROM_VOID_PTR`](../code-quality/c26471.md) - added Example to C26471 -- [`C26474 NO_IMPLICIT_CAST`](../code-quality/c26474.md) - updated to clarify base/derived cases -- [`C26482 NO_DYNAMIC_ARRAY_INDEXING`](../code-quality/c26482.md) - added example to C26482 -- [`C26483 STATIC_INDEX_OUT_OF_RANGE`](../code-quality/c26483.md) - added example to C26483 -- [`C26490 NO_REINTERPRET_CAST`](../code-quality/c26490.md) - added example to C26490 -- [`C26492 NO_CONST_CAST`](../code-quality/c26492.md) - added example to C26492 -- [`C26493 NO_CSTYLE_CAST`](../code-quality/c26493.md) - added example to C26493 -- [`C26494 VAR_USE_BEFORE_INIT`](../code-quality/c26494.md) - added example to C26494 -- [`C26495 MEMBER_UNINIT`](../code-quality/c26495.md) - updated examples and links in C26495 -- [`C26496 USE_CONST_FOR_VARIABLE`](../code-quality/c26496.md) - added example to C26496 -- [`C26497 USE_CONSTEXPR_FOR_FUNCTION`](../code-quality/c26497.md) - added example to C26497 - -#### Linux with Microsoft C++ in Visual Studio - -**New articles** - -- [Configure a Linux CMake project in Visual Studio](../linux/cmake-linux-configure.md) - -**Updated articles** - -- [Configure a Linux CMake project in Visual Studio](../linux/cmake-linux-configure.md) - updated to reflect latest UI -- [ConnectionManager reference](../linux/connectionmanager-reference.md) - added commands for modify, clean -- [Create a Linux MSBuild C++ project in Visual Studio](../linux/create-a-new-linux-project.md) - updated instructions to create a Linux project -- [Deploy, run, and debug your Linux MSBuild project](../linux/deploy-run-and-debug-your-linux-project.md) - added `GDB Path` - -#### C/C++ compiler and tools errors and warnings - -**New articles** - -- [Compiler Warning (level 4) C4388](../error-messages/compiler-warnings/c4388.md) - added warning C4388, updated Visual Studio 16.7 warnings - -**Updated articles** - -- [Compiler Error C3381](../error-messages/compiler-errors-2/compiler-error-c3381.md) - address cpp-docs 2493; update remarks and example -- [Compiler Warning (level 3) C4018](../error-messages/compiler-warnings/compiler-warning-level-3-c4018.md) - updated Visual Studio 16.7 warnings -- [Compiler Warning (level 4) C4389](../error-messages/compiler-warnings/compiler-warning-level-4-c4389.md) - updated Visual Studio 16.7 warnings -- [Compiler Warnings by compiler version](../error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md) - updated Visual Studio 16.7 warnings -- [Compiler warnings C4800 through C5999](../error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md) - updated Visual Studio 16.7 warnings - -#### C/C++ compiler intrinsics and assembly language - -**Updated articles** - -- [C++ conformance improvements in Visual Studio](../overview/cpp-conformance-improvements.md) - updated to Visual Studio 16.8 release notes -- [C++ in Visual Studio](../overview/visual-cpp-in-visual-studio.md) - updated DevCom and Microsoft Docs Q&A links -- [Microsoft C/C++ help and community](../overview/visual-cpp-help-and-community.md) - updated DevCom and Microsoft Docs Q&A links -- [Microsoft C/C++ language conformance](../overview/visual-cpp-language-conformance.md) - updated C++20 library conformance table, update language feature table for Visual Studio 16.7 - -#### C++ in Visual Studio - -**Updated articles** - -- [`__restrict`](../cpp/extension-restrict.md) -- [`union`](../cpp/unions.md) - fixed code snippet -- [if-else statement (C++)](../cpp/if-else-statement-cpp.md) - added description for `if/else` grammar - -#### C/C++ projects and build systems - -**New articles** - -- [`.vcxproj` files and wildcards](../build/reference/vcxproj-files-and-wildcards.md) -- [`/headerUnit` (Use header unit IFC)](../build/reference/headerunit.md) -- [`/module:exportHeader` (Create header units)](../build/reference/module-exportheader.md) -- [`/module:reference` (Use named module IFC)](../build/reference/module-reference.md) -- [`/translateInclude` (Translate include directives into import directives)](../build/reference/translateinclude.md) -- [`/Zc:preprocessor` (Enable preprocessor conformance mode)](../build/reference/zc-preprocessor.md) - -**Updated articles** - -- [`/clr` (Common Language Runtime Compilation)](../build/reference/clr-common-language-runtime-compilation.md) - added description for `/clr` -- [`/permissive-` (Standards conformance)](../build/reference/permissive-standards-conformance.md) - updated to Visual Studio 16.8 release notes -- [Importing data using `__declspec(dllimport)`](../build/importing-data-using-declspec-dllimport.md) - updated example -- [pgosweep](../build/pgosweep.md) - added more pgosweep options - -#### C++ porting and upgrade guide - -**Updated articles** - -- [How to: Use existing C++ code in a Universal Windows Platform app](../porting/how-to-use-existing-cpp-code-in-a-universal-windows-platform-app.md) - reworked for clarity and updated examples - -#### C++ Standard Library (STL) reference - -**New articles** - -- [``](../standard-library/bit.md) -- [`` functions](../standard-library/bit-functions.md) -- [`endian` enum](../standard-library/bit-enum.md) - -**Updated articles** - -- [`` functions](../standard-library/bit-functions.md) - updated `nodiscard` syntax -- [`` typedefs](../standard-library/ios-typedefs.md) - updated example -- [`basic_string_view` Class](../standard-library/basic-string-view-class.md) - added `starts_with()`, `ends_with()` -- [`basic_string` Class](../standard-library/basic-string-class.md) - added `_starts_with()`, `ends_with()` -- [`ios_base Class`](../standard-library/ios-base-class.md) -- [`map` class](../standard-library/map-class.md) -- [`multimap` Class](../standard-library/multimap-class.md) - added `contains()` -- [`multiset` Class](../standard-library/multiset-class.md) - added `contains()` -- [`set` Class](../standard-library/set-class.md) - added `contains()` -- [`unordered_map` Class](../standard-library/unordered-map-class.md) - added `contains()` -- [`unordered_multimap` Class](../standard-library/unordered-multimap-class.md) - added `contains()` -- [`unordered_multiset` Class](../standard-library/unordered-multiset-class.md) - added `contains()` -- [`unordered_set` Class](../standard-library/unordered-set-class.md) - added `contains()` - -#### Community contributors - -The following people contributed to the C++, C, and Assembler docs during this period. Thank you! See [Microsoft Docs contributor guide overview](/contribute/) if you'd like to learn how to contribute. - -- [BeardedFish](https://github.com/BeardedFish) - Darian B. (1) -- [codevenkat](https://github.com/codevenkat) (1) -- [definedrisk](https://github.com/definedrisk) - Ben (3) -- [eltociear](https://github.com/eltociear) - Ikko Ashimine (1) -- [fsb4000](https://github.com/fsb4000) - Igor Zhukov (1) -- [Jaiganeshkumaran](https://github.com/Jaiganeshkumaran) - Jaiganesh Kumaran (1) -- [jogo-](https://github.com/jogo-) (1) -- [justanotheranonymoususer](https://github.com/justanotheranonymoususer) (1) -- [matrohin](https://github.com/matrohin) - Dmitry Matrokhin (1) -- [mhemmit](https://github.com/mhemmit) (1) -- [MSDN-WhiteKnight](https://github.com/MSDN-WhiteKnight) - MSDN.WhiteKnight (1) -- [OdinTemple](https://github.com/OdinTemple) - Odin Temple (1) -- [r00tdr4g0n](https://github.com/r00tdr4g0n) - r00tdr4g0n (1) -- [sebkraemer](https://github.com/sebkraemer) - Sebastian Krämer (1) -- [vtjnash](https://github.com/vtjnash) - Jameson Nash (1) -- [yecril71pl](https://github.com/yecril71pl) - Christopher Yeleighton (4) -- [Youssef1313](https://github.com/Youssef1313) - Youssef Victor (1) -- [zecozephyr](https://github.com/zecozephyr) - Jonathan Bailey (1) +- [westinn](https://github.com/westinn) - Nicolas Westin (1) \ No newline at end of file diff --git a/docs/standard-library/algorithm-functions.md b/docs/standard-library/algorithm-functions.md index 72c5d974442..f720e582222 100644 --- a/docs/standard-library/algorithm-functions.md +++ b/docs/standard-library/algorithm-functions.md @@ -1,12 +1,11 @@ --- description: "Learn more about: <algorithm> functions" -title: "<algorithm> functions" +title: " functions" ms.date: "09/09/2021" f1_keywords: ["algorithm/std::adjacent_find", "algorithm/std::all_of", "algorithm/std::any_of", "algorithm/std::binary_search", "algorithm/std::copy", "algorithm/std::copy_backward", "algorithm/std::copy_if", "algorithm/std::copy_n", "algorithm/std::equal", "algorithm/std::equal_range", "algorithm/std::fill", "algorithm/std::fill_n", "algorithm/std::find", "algorithm/std::find_end", "algorithm/std::find_first_of", "algorithm/std::find_if", "algorithm/std::find_if_not", "algorithm/std::for_each", "algorithm/std::generate", "algorithm/std::generate_n", "algorithm/std::includes", "algorithm/std::inplace_merge", "algorithm/std::is_heap", "algorithm/std::is_heap_until", "algorithm/std::is_partitioned", "algorithm/std::is_permutation", "algorithm/std::is_sorted", "algorithm/std::is_sorted_until", "algorithm/std::iter_swap", "algorithm/std::lexicographical_compare", "algorithm/std::lower_bound", "algorithm/std::make_heap", "algorithm/std::max", "algorithm/std::max_element", "algorithm/std::merge", "algorithm/std::min", "algorithm/std::minmax", "algorithm/std::minmax_element", "algorithm/std::min_element", "algorithm/std::mismatch", "algorithm/std::move", "algorithm/std::move_backward", "algorithm/std::next_permutation", "algorithm/std::none_of", "algorithm/std::nth_element", "algorithm/std::partial_sort", "algorithm/std::partial_sort_copy", "algorithm/std::partition", "algorithm/std::partition_point", "algorithm/std::pop_heap", "algorithm/std::prev_permutation", "algorithm/std::push_heap", "algorithm/std::random_shuffle", "algorithm/std::remove", "algorithm/std::remove_copy", "algorithm/std::remove_copy_if", "algorithm/std::remove_if", "algorithm/std::replace", "algorithm/std::replace_copy", "algorithm/std::replace_copy_if", "algorithm/std::replace_if", "algorithm/std::reverse", "algorithm/std::reverse_copy", "algorithm/std::rotate", "algorithm/std::rotate_copy", "algorithm/std::search", "algorithm/std::search_n", "algorithm/std::set_difference", "algorithm/std::set_intersection", "algorithm/std::set_symmetric_difference", "algorithm/std::set_union", "algorithm/std::shuffle", "algorithm/std::sort", "algorithm/std::sort_heap", "algorithm/std::stable_partition", "algorithm/std::stable_sort", "algorithm/std::swap_ranges", "algorithm/std::transform", "algorithm/std::unique", "algorithm/std::unique_copy", "algorithm/std::upper_bound", "xutility/std::copy", "xutility/std::copy_backward", "xutility/std::copy_n", "xutility/std::count", "xutility/std::equal", "xutility/std::fill", "xutility/std::fill_n", "xutility/std::find", "xutility/std::is_permutation", "xutility/std::lexicographical_compare", "xutility/std::move", "xutility/std::move_backward", "xutility/std::reverse", "xutility/std::rotate", "algorithm/std::count_if", "algorithm/std::partition_copy", "algorithm/std::swap"] -ms.assetid: c10b0c65-410c-4c83-abf8-8b7f61bba8d0 helpviewer_keywords: ["std::adjacent_find [C++]", "std::all_of [C++]", "std::any_of [C++]", "std::binary_search [C++]", "std::copy [C++]", "std::copy_backward [C++]", "std::copy_if [C++]", "std::copy_n [C++]", "std::equal [C++]", "std::equal_range [C++]", "std::fill [C++]", "std::fill_n [C++]", "std::find [C++]", "std::find_end [C++]", "std::find_first_of [C++]", "std::find_if [C++]", "std::find_if_not [C++]", "std::for_each [C++]", "std::generate [C++]", "std::generate_n [C++]", "std::includes [C++]", "std::inplace_merge [C++]", "std::is_heap [C++]", "std::is_heap_until [C++]", "std::is_partitioned [C++]", "std::is_permutation [C++]", "std::is_sorted [C++]", "std::is_sorted_until [C++]", "std::iter_swap [C++]", "std::lexicographical_compare [C++]", "std::lower_bound [C++]", "std::make_heap [C++]", "std::max [C++]", "std::max_element [C++]", "std::merge [C++]", "std::min [C++]", "std::minmax [C++]", "std::minmax_element [C++]", "std::min_element [C++]", "std::mismatch [C++]", "std::move [C++]", "std::move_backward [C++]", "std::next_permutation [C++]", "std::none_of [C++]", "std::nth_element [C++]", "std::partial_sort [C++]", "std::partial_sort_copy [C++]", "std::partition [C++]", "std::partition_point [C++]", "std::pop_heap [C++]", "std::prev_permutation [C++]", "std::push_heap [C++]", "std::random_shuffle [C++]", "std::remove [C++]", "std::remove_copy [C++]", "std::remove_copy_if [C++]", "std::remove_if [C++]", "std::replace [C++]", "std::replace_copy [C++]", "std::replace_copy_if [C++]", "std::replace_if [C++]", "std::reverse [C++]", "std::reverse_copy [C++]", "std::rotate [C++]", "std::rotate_copy [C++]", "std::search [C++]", "std::search_n [C++]", "std::set_difference [C++]", "std::set_intersection [C++]", "std::set_symmetric_difference [C++]", "std::set_union [C++]", "std::shuffle [C++]", "std::sort [C++]", "std::sort_heap [C++]", "std::stable_partition [C++]", "std::stable_sort [C++]", "std::swap_ranges [C++]", "std::transform [C++]", "std::unique [C++]", "std::unique_copy [C++]", "std::upper_bound [C++]", "std::copy [C++]", "std::copy_backward [C++]", "std::copy_n [C++]", "std::count [C++]", "std::equal [C++]", "std::fill [C++]", "std::fill_n [C++]", "std::find [C++]", "std::is_permutation [C++]", "std::lexicographical_compare [C++]", "std::move [C++]", "std::move_backward [C++]", "std::reverse [C++]", "std::rotate [C++]", "std::count_if [C++]", "std::partition_copy [C++]", "std::swap [C++]"] --- -# <algorithm> functions +# `` functions ## `adjacent_find` @@ -54,7 +53,7 @@ The binary predicate giving the condition to be satisfied by the values of the a ### Return value -A forward iterator to the first of the adjacent elements that are either equal to each other (in the first version) or that satisfy the condition given by the binary predicate (in the second version), provided that such a pair of elements is found. Otherwise, an iterator pointing to *last* is returned. +A forward iterator to the first of the adjacent elements that are either equal to each other (in the first version) or that satisfy the condition given by the binary predicate (in the second version) if such a pair of elements is found. Otherwise, an iterator pointing to *`last`* is returned. ### Remarks @@ -500,7 +499,7 @@ An output iterator addressing the position that is one past the final element in The source range must be valid and there must be sufficient space at the destination to hold all the elements being copied. -Because the algorithm copies the source elements in order beginning with the first element, the destination range can overlap with the source range provided the *last* position of the source range is not contained in the destination range. `copy` can be used to shift elements to the left but not the right, unless there is no overlap between the source and destination ranges. To shift to the right any number of positions, use the [`copy_backward`](algorithm-functions.md#copy_backward) algorithm. +Because the algorithm copies the source elements in order beginning with the first element, the destination range can overlap with the source range provided the *`last`* position of the source range is not contained in the destination range. `copy` can be used to shift elements to the left but not the right, unless there is no overlap between the source and destination ranges. To shift to the right any number of positions, use the [`copy_backward`](algorithm-functions.md#copy_backward) algorithm. The `copy` algorithm only modifies values pointed to by the iterators, assigning new values to elements in the destination range. It cannot be used to create new elements and cannot insert elements into an empty container directly. @@ -587,7 +586,7 @@ A bidirectional iterator addressing the position of one past the final element i ### Return value -An output iterator addressing the position that is one past the final element in the destination range, that is, the iterator addresses *`destEnd`* - (*`last`* - *`first`*). +An output iterator addressing the position that is one past the final element in the destination range, that is, the iterator addresses `destEnd - (last - first)`. ### Remarks @@ -597,7 +596,7 @@ The `copy_backward` algorithm imposes more stringent requirements than that the The `copy_backward` and [`move_backward`](algorithm-functions.md#move_backward) algorithms are the only C++ Standard Library algorithms designating the output range with an iterator pointing to the end of the destination range. -Because the algorithm copies the source elements in order beginning with the last element, the destination range can overlap with the source range provided the *first* position of the source range is not contained in the destination range. `copy_backward` can be used to shift elements to the right but not the left, unless there is no overlap between the source and destination ranges. To shift to the left any number of positions, use the [`copy`](algorithm-functions.md#copy) algorithm. +Because the algorithm copies the source elements in order beginning with the last element, the destination range can overlap with the source range provided the *`first`* position of the source range is not contained in the destination range. `copy_backward` can be used to shift elements to the right but not the left, unless there is no overlap between the source and destination ranges. To shift to the left any number of positions, use the [`copy`](algorithm-functions.md#copy) algorithm. The `copy_backward` algorithm only modifies values pointed to by the iterators, assigning new values to elements in the destination range. It cannot be used to create new elements and cannot insert elements into an empty container directly. @@ -1004,7 +1003,7 @@ The number of elements in v1 greater than 10 is: 2. Compares two ranges element by element for equality or equivalence in a sense specified by a binary predicate. -Use `std::equal` when comparing elements in different container types (for example `vector` and `list`) or when comparing different element types, or when you need to compare sub-ranges of containers. Otherwise, when comparing elements of the same type in the same container type, use the non-member `operator==` that is provided for each container. +Use `std::equal` when comparing elements in different container types (for example `vector` and `list`) or when comparing different element types, or when you need to compare subranges of containers. Otherwise, when comparing elements of the same type in the same container type, use the non-member `operator==` that is provided for each container. Use the dual-range overloads in C++14 code because the overloads that only take a single iterator for the second range will not detect differences if the second range is longer than the first range, and will result in undefined behavior if the second range is shorter than the first range. @@ -1100,7 +1099,7 @@ The range to be searched must be valid; all iterators must be dereferenceable an If the two ranges are equal length, then the time complexity of the algorithm is linear in the number of elements contained in the range. Otherwise the function immediately returns **`false`**. -Neither the `operator==` nor the user-defined predicate is required to impose an equivalence relation that symmetric, reflexive and transitive between its operands. +Neither the `operator==` nor the user-defined predicate is required to impose an equivalence relation that symmetric, reflexive, and transitive between its operands. ### Example @@ -2885,7 +2884,7 @@ Returns **`true`** when all of the elements in the given range that test **`true ### Remarks -The template function returns **`true`** only if all elements in `[first, last)` are partitioned by *pred*; that is, all elements `X` in `[first, last)` for which `pred (X)` is true occur before all elements `Y` for which `pred (Y)` is **`false`**. +The template function returns **`true`** only if all elements in `[first, last)` are partitioned by *`pred`*; that is, all elements `X` in `[first, last)` for which `pred (X)` is true occur before all elements `Y` for which `pred (Y)` is **`false`**. ## `is_permutation` @@ -2949,7 +2948,7 @@ A predicate that tests for equivalence and returns a **`bool`**. The first template function assumes that there are as many elements in the range beginning at *first2* as there are in the range designated by `[first1, last1)`. If there are more elements in the second range, they are ignored; if there are less, undefined behavior will occur. The third template function (C++14 and later) does not make this assumption. Both return **`true`** only if, for each element X in the range designated by `[first1, last1)` there are as many elements Y in the same range for which X == Y as there are in the range beginning at *`first2`* or `[first2, last2)`. Here, `operator==` must perform a pairwise comparison between its operands. -The second and fourth template functions behave the same, except that they replace `operator==(X, Y)` with `Pred(X, Y)`. To behave correctly, the predicate must be symmetric, reflexive and transitive. +The second and fourth template functions behave the same, except that they replace `operator==(X, Y)` with `Pred(X, Y)`. To behave correctly, the predicate must be symmetric, reflexive, and transitive. ### Example @@ -4816,7 +4815,7 @@ The range to be searched must be valid; all iterators must be dereferenceable an The time complexity of the algorithm is linear in the number of elements contained in the shorter range. -The user-defined predicate is not required to impose an equivalence relation that symmetric, reflexive and transitive between its operands. +The user-defined predicate is not required to impose an equivalence relation that symmetric, reflexive, and transitive between its operands. ### Example @@ -4833,7 +4832,7 @@ The following example demonstrates how to use mismatch. The C++03 overload is sh using namespace std; // Return whether first element is twice the second -// Note that this is not a symmetric, reflexive and transitive equivalence. +// Note that this is not a symmetric, reflexive, and transitive equivalence. // mismatch and equal accept such predicates, but is_permutation does not. bool twice(int elem1, int elem2) { @@ -5015,7 +5014,7 @@ User-defined predicate function object that defines the comparison criterion to The range referenced must be valid; all pointers must be dereferenceable and within the sequence the last position is reachable from the first by incrementation. -The default binary predicate is less than and the elements in the range must be less than comparable to insure that the next permutation is well-defined. +The default binary predicate is less than and the elements in the range must be less than comparable to insure that the next permutation is well defined. The complexity is linear with at most `(last - first) / 2` swaps. @@ -5213,7 +5212,7 @@ User-defined predicate function object that defines the comparison criterion to The range referenced must be valid; all pointers must be dereferenceable and within the sequence the last position is reachable from the first by incrementation. -The `nth_element` algorithm does not guarantee that elements in the sub-ranges either side of the *n*th element are sorted. It thus makes fewer guarantees than `partial_sort`, which orders the elements in the range below some chosen element, and may be used as a faster alternative to `partial_sort` when the ordering of the lower range is not required. +The `nth_element` algorithm does not guarantee that elements in the subranges either side of the *n*th element are sorted. It thus makes fewer guarantees than `partial_sort`, which orders the elements in the range below some chosen element, and may be used as a faster alternative to `partial_sort` when the ordering of the lower range is not required. Elements are equivalent, but not necessarily equal, if neither is less than the other. @@ -5722,10 +5721,10 @@ An input iterator that indicates the beginning of a range to check for a conditi An input iterator that indicates the end of a range. *`dest1`*\ -An output iterator used to copy elements that return true for a condition tested by using *pred*. +An output iterator used to copy elements that return true for a condition tested by using *`pred`*. *`dest2`*\ -An output iterator used to copy elements that return false for a condition tested by using *pred*. +An output iterator used to copy elements that return false for a condition tested by using *`pred`*. *`pred`*\ The condition to test for. This is provided by a user-defined predicate function object that defines the condition to be tested. A unary predicate takes a single argument and returns **`true`** or **`false`**. @@ -5759,7 +5758,7 @@ The condition to test for. This is provided by a user-defined predicate function ### Return value -Returns a `ForwardIterator` that refers to the first element that does not fulfill the condition tested for by *pred*, or returns *last* if one is not found. +Returns a `ForwardIterator` that refers to the first element that does not fulfill the condition tested for by *`pred`*, or returns *`last`* if one is not found. ### Remarks @@ -5910,7 +5909,7 @@ User-defined predicate function object that defines the comparison criterion to The range referenced must be valid; all pointers must be dereferenceable and within the sequence the last position is reachable from the first by incrementation. -The default binary predicate is less than and the elements in the range must be less-than comparable to ensure that the previous permutation is well-defined. +The default binary predicate is less than and the elements in the range must be less-than comparable to ensure that the previous permutation is well defined. The complexity is linear, with at most (`last` - `first`)/2 swaps. @@ -7790,7 +7789,7 @@ The sorted source ranges must each be arranged as a precondition to the applicat The operation is stable as the relative order of elements within each range is preserved in the destination range. The source ranges are not modified by the algorithm merge. -The value types of the input iterators need be less-than-comparable to be ordered, so that, given two elements, it may be determined either that they are equivalent (in the sense that neither is less than the other) or that one is less than the other. This results in an ordering between the nonequivalent elements. When there are equivalent elements in both source ranges, the elements in the first range precede the elements from the second source range in the destination range. If the source ranges contain duplicates of an element such that there are more in the first source range than in the second, then the destination range will contain the number by which the occurrences of those elements in the first source range exceed the occurrences of those elements in the second source range. +The value types of the input iterators need to be less-than-comparable to be ordered, so that, given two elements, it may be determined either that they are equivalent (in the sense that neither is less than the other) or that one is less than the other. This results in an ordering between the nonequivalent elements. When there are equivalent elements in both source ranges, the elements in the first range precede the elements from the second source range in the destination range. If the source ranges contain duplicates of an element such that there are more in the first source range than in the second, then the destination range will contain the number by which the occurrences of those elements in the first source range exceed the occurrences of those elements in the second source range. The complexity of the algorithm is linear with at most `2 * ((last1 - first1) + (last2 - first2)) - 1` comparisons for nonempty source ranges. @@ -8592,7 +8591,7 @@ The range referenced must be valid; all pointers must be dereferenceable and wit Elements are equivalent, but not necessarily equal, if neither is less than the other. The `sort` algorithm is not stable and so does not guarantee that the relative ordering of equivalent elements will be preserved. The algorithm `stable_sort` does preserve this original ordering. -The average of a sort complexity is `O( N log N )`, where *N* = *last* - *first*. +The average of a sort complexity is `O( N log N )`, where *N* = *`last`* - *`first`*. ### Example @@ -8706,7 +8705,7 @@ Heaps are an ideal way to implement priority queues and they are used in the imp The range referenced must be valid; all pointers must be dereferenceable and within the sequence the last position is reachable from the first by incrementation. -The complexity is at most `N log N`, where *N* = *last* - *first*. +The complexity is at most `N log N`, where *N* = *`last`* - *`first`*. ### Example @@ -8902,7 +8901,7 @@ The range referenced must be valid; all pointers must be dereferenceable and wit Elements are equivalent, but not necessarily equal, if neither is less than the other. The `sort` algorithm is stable and guarantees that the relative ordering of equivalent elements will be preserved. -The run-time complexity of `stable_sort` depends on the amount of memory available, but the best case (given sufficient memory) is `O(N log N)` and the worst case is `O(N (log N)^2)`, where *N* = *last* - *first*. Usually, the `sort` algorithm is significantly faster than `stable_sort`. +The run-time complexity of `stable_sort` depends on the amount of memory available, but the best case (given sufficient memory) is `O(N log N)` and the worst case is `O(N (log N)^2)`, where *N* = *`last`* - *`first`*. Usually, the `sort` algorithm is significantly faster than `stable_sort`. ### Example @@ -9368,7 +9367,7 @@ Both forms of the algorithm remove the second duplicate of a consecutive pair of The operation of the algorithm is stable so that the relative order of the undeleted elements is not changed. -The range referenced must be valid; all pointers must be dereferenceable and within the sequence the last position is reachable from the first by incrementation. he number of elements in the sequence is not changed by the algorithm `unique` and the elements beyond the end of the modified sequence are dereferenceable but not specified. +The range referenced must be valid; all pointers must be dereferenceable and within the sequence the last position is reachable from the first by incrementation. The number of elements in the sequence is not changed by the algorithm `unique` and the elements beyond the end of the modified sequence are dereferenceable but not specified. The complexity is linear, requiring `(last - first) - 1` comparisons. diff --git a/docs/standard-library/any.md b/docs/standard-library/any.md index 9dd44136327..cf94209ff7a 100644 --- a/docs/standard-library/any.md +++ b/docs/standard-library/any.md @@ -6,13 +6,13 @@ f1_keywords: [""] helpviewer_keywords: [""] no-loc: ["any", "std", "class"] --- -# <any> +# ``; Defines the class `std::any` and several supporting functions and classes. ## Requirements -**Header:** \ +**Header:** `` **Namespace:** `std` diff --git a/docs/standard-library/bit-functions.md b/docs/standard-library/bit-functions.md index 1b4475be608..529c01dbeeb 100644 --- a/docs/standard-library/bit-functions.md +++ b/docs/standard-library/bit-functions.md @@ -5,24 +5,24 @@ ms.date: "08/28/2020" f1_keywords: ["bit/std::bit_cast", "bit/std::has_single_bit", "bit/std::bit_ceil", "bit/std::bit_floor", "bit/std::bit_width", "bit/std::rotl", "bit/std::rotr", "bit/std::countl_zero", "bit/std::countl_one","bit/std::countr_zero","bit/std::countr_one","bit/std::popcount"] helpviewer_keywords: ["std::bit [C++], bit_cast", "std::bit [C++], has_single_bit", "std::bit [C++], bit_ceil", "std::bit [C++], bit_floor", "std::bit [C++], bit_width", "std::bit [C++], rotl", "std::bit [C++], rotr", "std::bit [C++], countl_zero", "std::bit [C++], countl_one", "std::bit [C++], countr_zero", "std::bit [C++], countr_one", "std::bit [C++], popcount"] --- -# <bit> functions +# `` functions -The \ header includes the following non-member template functions: +The `` header includes the following non-member template functions: | **Non-member functions** | **Description** | |--------|---------| -|[bit_cast](#bit_cast) | Reinterpret the object representation from one type to another. | -|[bit_ceil](#bit_ceil) | Find the smallest power of two greater than or equal to a value. | -|[bit_floor](#bit_floor) | Find the largest power of two not greater than a value. | -|[bit_width](#bit_width) | Find the smallest number of bits needed to represent a value. | -|[countl_zero](#countl_zero) | Count the number of consecutive bits set to zero, starting from the most significant bit. | -|[countl_one](#countl_one) | Count the number of consecutive bits set to one, starting from the most significant bit. | -|[countr_zero](#countr_zero) | Count the number of consecutive bits set to zero, starting from the least significant bit. | -|[countr_one](#countl_one) | Count the number of consecutive bits set to one, starting from the least significant bit. | -|[has_single_bit](#has_single_bit) | Check if a value has only a single bit set to one. This is the same as testing whether a value is a power of two. | -|[popcount](#popcount) | Count the number of bits set to one. | -|[rotl](#rotl) | Compute the result of a bitwise left rotation. | -|[rotr](#rotr) | Compute the result of a bitwise right rotation. | +|[`bit_cast`](#bit_cast) | Reinterpret the object representation from one type to another. | +|[`bit_ceil`](#bit_ceil) | Find the smallest power of two greater than or equal to a value. | +|[`bit_floor`](#bit_floor) | Find the largest power of two not greater than a value. | +|[`bit_width`](#bit_width) | Find the smallest number of bits needed to represent a value. | +|[`countl_zero`](#countl_zero) | Count the number of consecutive bits set to zero, starting from the most significant bit. | +|[`countl_one`](#countl_one) | Count the number of consecutive bits set to one, starting from the most significant bit. | +|[`countr_zero`](#countr_zero) | Count the number of consecutive bits set to zero, starting from the least significant bit. | +|[`countr_one`](#countl_one) | Count the number of consecutive bits set to one, starting from the least significant bit. | +|[`has_single_bit`](#has_single_bit) | Check if a value has only a single bit set to one. This is the same as testing whether a value is a power of two. | +|[`popcount`](#popcount) | Count the number of bits set to one. | +|[`rotl`](#rotl) | Compute the result of a bitwise left rotation. | +|[`rotr`](#rotr) | Compute the result of a bitwise right rotation. | ## `bit_cast` @@ -87,10 +87,10 @@ This overload only participates in overload resolution if: This function template is `constexpr` if and only if `To`, `From`, and the types of their subobjects are: -- not a union or pointer type -- not a pointer to member type -- not volatile-qualified -- have no non-static data member that is a reference type +- Not a union or pointer type +- Not a pointer to member type +- Not volatile-qualified +- Have no non-static data member that is a reference type ## `bit_ceil` @@ -103,7 +103,7 @@ template ### Parameters -*value*\ +*`value`*\ The unsigned integer value to test. ### Return value @@ -153,7 +153,7 @@ template< class T > ### Parameters -*value*\ +*`value`*\ The unsigned integer value to test. ### Return value @@ -206,7 +206,7 @@ template ### Parameters -*value*\ +*`value`*\ The unsigned integer value to test. ### Return value @@ -258,7 +258,7 @@ template ### Parameters -*value*\ +*`value`*\ The unsigned integer value to test. ### Return value @@ -311,7 +311,7 @@ template ### Parameters -*value*\ +*`value`*\ The unsigned integer value to test. ### Return value @@ -364,7 +364,7 @@ template ### Parameters -*value*\ +*`value`*\ The unsigned integer value to test. ### Return value @@ -418,7 +418,7 @@ template ### Parameters -*value*\ +*`value`*\ The unsigned integer value to test. ### Return value @@ -471,12 +471,12 @@ template ### Parameters -*value*\ +*`value`*\ The unsigned integer value to test. ### Return value -`true` if `value` has only one bit set which also means that `value` is a power of two. Otherwise, `false`. +`true` if `value` has only one bit set, which also means that `value` is a power of two. Otherwise, `false`. ### Example @@ -525,7 +525,7 @@ template ### Parameters -*value*\ +*`value`*\ The unsigned integer value to test. ### Return value @@ -584,7 +584,7 @@ template ### Parameters -*value*\ +*`value`*\ The unsigned integer value to rotate. *s*\ @@ -646,10 +646,10 @@ template ### Parameters -*value*\ +*`value`*\ The unsigned integer value to rotate. -*s*\ +*`s`*\ The number of right rotations to perform. ### Return value @@ -699,7 +699,7 @@ This template function only participates in overload resolution if `T` is an uns ## Requirements -**Header:** \ +**Header:** `` **Namespace:** std @@ -707,4 +707,4 @@ This template function only participates in overload resolution if `T` is an uns ## See also -[\](bit.md) +[``](bit.md) diff --git a/docs/standard-library/future-functions.md b/docs/standard-library/future-functions.md index a9c7a2d3aa5..c40c313f2d6 100644 --- a/docs/standard-library/future-functions.md +++ b/docs/standard-library/future-functions.md @@ -1,20 +1,19 @@ --- -description: "Learn more about: <future> functions" -title: "<future> functions" +description: "Learn more about: functions" +title: " functions" ms.date: "08/17/2021" f1_keywords: ["future/std::async", "future/std::future_category", "future/std::make_error_code", "future/std::make_error_condition", "future/std::swap"] -ms.assetid: 1e3acc1e-736a-42dc-ade2-b2fe69aa96bc helpviewer_keywords: ["std::async [C++]", "std::future_category [C++]", "std::make_error_code [C++]", "std::make_error_condition [C++]", "std::swap [C++]"] --- -# <future> functions +# `` functions -[async](#async)\ -[future_category](#future_category)\ -[make_error_code](#make_error_code)\ -[make_error_condition](#make_error_condition)\ -[swap](#swap)| +[`async`](#async)\ +[`future_category`](#future_category)\ +[`make_error_code`](#make_error_code)\ +[`make_error_condition`](#make_error_condition)\ +[`swap`](#swap)| -## async +## `async` Represents an *asynchronous provider*. @@ -31,7 +30,7 @@ future::type> ### Parameters *policy*\ -A [launch](../standard-library/future-enums.md#launch) value. +A [`launch`](../standard-library/future-enums.md#launch) value. ### Remarks @@ -39,32 +38,32 @@ Definitions of abbreviations: |Abbreviation|Description| |-|-| -|*dfn*|The result of calling `decay_copy(forward(fn))`.| -|*dargs*|The results of the calls `decay_copy(forward(args...))`.| -|*Ty*|The type `result_of::type`.| +|*`dfn`*|The result of calling `decay_copy(forward(fn))`.| +|*`dargs`*|The results of the calls `decay_copy(forward(args...))`.| +|*`Ty`*|The type `result_of::type`.| The first template function returns `async(launch::any, fn, args...)`. -The second function returns a `future` object whose *associated asynchronous state* holds a result together with the values of *dfn* and *dargs* and a thread object to manage a separate thread of execution. +The second function returns a `future` object whose *associated asynchronous state* holds a result together with the values of *`dfn`* and *`dargs`* and a thread object to manage a separate thread of execution. -Unless `decay::type` is a type other than launch, the second function does not participate in overload resolution. +Unless `decay::type` is a type other than launch, the second function doesn't participate in overload resolution. -The C++ standard states that if policy is launch::async, the function creates a new thread. However the Microsoft implementation is currently non-conforming. It obtains its threads from the Windows ThreadPool, which in some cases may provide a recycled thread rather than a new one. This means that the `launch::async` policy is actually implemented as `launch::async|launch::deferred`. Another implication of the ThreadPool-based implementation is that there is no guarantee that thread-local variables will be destroyed when the thread completes. If the thread is recycled and provided to a new call to `async`, the old variables will still exist. We therefore recommend that you do not use thread-local variables with `async`. +The C++ standard states that if policy is launch::async, the function creates a new thread. However the Microsoft implementation is currently non-conforming. It obtains its threads from the Windows ThreadPool, which in some cases may provide a recycled thread rather than a new one. This means that the `launch::async` policy is implemented as `launch::async|launch::deferred`. Another implication of the ThreadPool-based implementation is that there's no guarantee that thread-local variables will be destroyed when the thread completes. If the thread is recycled and provided to a new call to `async`, the old variables will still exist. We recommend that you don't use thread-local variables with `async`. If *policy* is `launch::deferred`, the function marks its associated asynchronous state as holding a *deferred function* and returns. The first call to any non-timed function that waits for the associated asynchronous state to be ready in effect calls the deferred function by evaluating `INVOKE(dfn, dargs..., Ty)`. -In all cases, the associated asynchronous state of the `future` object is not set to *ready* until the evaluation of `INVOKE(dfn, dargs..., Ty)` completes, either by throwing an exception or by returning normally. The result of the associated asynchronous state is an exception if one was thrown, or any value that's returned by the evaluation. +In all cases, the associated asynchronous state of the `future` object isn't set to *ready* until the evaluation of `INVOKE(dfn, dargs..., Ty)` completes, either by throwing an exception or by returning normally. The result of the associated asynchronous state is an exception if one was thrown, or any value that's returned by the evaluation. > [!NOTE] -> For a `future`—or the last [shared_future](../standard-library/shared-future-class.md)—that's attached to a task started with `std::async`, the destructor blocks if the task has not completed; that is, it blocks if this thread did not yet call `.get()` or `.wait()` and the task is still running. If a `future` obtained from `std::async` is moved outside the local scope, other code that uses it must be aware that its destructor may block for the shared state to become ready. +> For a `future`—or the last [`shared_future`](../standard-library/shared-future-class.md)—that's attached to a task started with `std::async`, the destructor blocks if the task has not completed; that is, it blocks if this thread did not yet call `.get()` or `.wait()` and the task is still running. If a `future` obtained from `std::async` is moved outside the local scope, other code that uses it must be aware that its destructor may block for the shared state to become ready. -The pseudo-function `INVOKE` is defined in [\](../standard-library/functional.md). +The pseudo-function `INVOKE` is defined in [``](../standard-library/functional.md). ### Microsoft Specific -When the passed function is executed asynchronously, it is executed on Windows Thread Pool; see [Thread Pools](/windows/win32/procthread/thread-pools). The number of concurrent threads is limited to the thread pool default (currently 500). The number of threads concurrently executing on hardware is currently limited by the number of logical processor in the process's processor group, so it is effectively limited to 64; see [Processor Groups](/windows/win32/procthread/processor-groups). +When the passed function is executed asynchronously, it's executed on Windows Thread Pool; see [Thread Pools](/windows/win32/procthread/thread-pools). The number of concurrent threads is limited to the thread pool default (currently 500). The number of threads concurrently executing on hardware is currently limited by the number of logical processor in the process's processor group, so it's effectively limited to 64; see [Processor Groups](/windows/win32/procthread/processor-groups). -## future_category +## `future_category` Returns a reference to the [error_category](../standard-library/error-category-class.md) object that characterizes errors that are associated with `future` objects. @@ -72,7 +71,7 @@ Returns a reference to the [error_category](../standard-library/error-category-c const error_category& future_category() noexcept; ``` -## make_error_code +## `make_error_code` Creates an [error_code](../standard-library/error-code-class.md) together with the [error_category](../standard-library/error-category-class.md) object that characterizes [future](../standard-library/future-class.md) errors. @@ -82,14 +81,14 @@ inline error_code make_error_code(future_errc Errno) noexcept; ### Parameters -*Errno*\ +*`Errno`*\ A [future_errc](../standard-library/future-enums.md#future_errc) value that identifies the reported error. ### Return Value `error_code(static_cast(Errno), future_category());` -## make_error_condition +## `make_error_condition` Creates an [error_condition](../standard-library/error-condition-class.md) together with the [error_category](../standard-library/error-category-class.md) object that characterizes [future](../standard-library/future-class.md) errors. @@ -99,14 +98,14 @@ inline error_condition make_error_condition(future_errc Errno) noexcept; ### Parameters -*Errno*\ +*`Errno`*\ A [future_errc](../standard-library/future-enums.md#future_errc) value that identifies the reported error. ### Return Value `error_condition(static_cast(Errno), future_category());` -## swap +## `swap` Exchanges the *associated asynchronous state* of one `promise` object with that of another. @@ -120,12 +119,12 @@ void swap(packaged_task& Left, packaged_task& ### Parameters -*Left*\ +*`Left`*\ The left `promise` object. -*Right*\ +*`Right`*\ The right `promise` object. ## See also -[\](../standard-library/future.md) +[``](../standard-library/future.md) diff --git a/docs/standard-library/last-spec-struct.md b/docs/standard-library/last-spec-struct.md index 7d6149aefc0..e469b938aaa 100644 --- a/docs/standard-library/last-spec-struct.md +++ b/docs/standard-library/last-spec-struct.md @@ -5,9 +5,9 @@ ms.date: 09/15/2021 f1_keywords: ["chrono/std::chrono::last_spec"] --- -# last_spec struct +# `last_spec` struct -Indicates the last item in a month, such as last day of the week of a month (the last Tuesday of February 2020) or the last day of a month (the last day of April 2019). +Indicates the last item in a month. For example, the last day of the week of a month, such as the last Tuesday of February 2020. Or the last day of a month, such as the last day of April 2019. ## Syntax @@ -19,9 +19,9 @@ inline constexpr last_spec last{} // C++20 ## Example: `last` Use `last_spec` to indicate the last item in a month. The following example uses `last` to indicate the: -- last day in December as a `monthDayLast` -- last Friday in July of 2021 as a `year_month_weekday_last` -- last day in April of 1975 as a `year_month_day_last` +- Last day in December as a `monthDayLast` +- Last Friday in July of 2021 as a `year_month_weekday_last` +- Last day in April of 1975 as a `year_month_day_last` ```cpp // compile using: /std:c++latest diff --git a/docs/standard-library/local_t.md b/docs/standard-library/local_t.md index 69e43ffa4d2..4fae2d5d72b 100644 --- a/docs/standard-library/local_t.md +++ b/docs/standard-library/local_t.md @@ -5,7 +5,7 @@ ms.date: 09/02/2021 f1_keywords: ["chrono/std::chrono::local_t"] --- -# local_t struct +# `local_t` struct A pseudo-clock. diff --git a/docs/standard-library/thread-class.md b/docs/standard-library/thread-class.md index e16fb6808ed..cfa6c9ae954 100644 --- a/docs/standard-library/thread-class.md +++ b/docs/standard-library/thread-class.md @@ -3,10 +3,9 @@ description: "Learn more about: thread Class" title: "thread Class" ms.date: "08/17/2021" f1_keywords: ["thread/std::thread", "thread/std::thread::id Class", "thread/std::thread::thread", "thread/std::thread::detach", "thread/std::thread::get_id", "thread/std::thread::hardware_concurrency", "thread/std::thread::join", "thread/std::thread::joinable", "thread/std::thread::native_handle", "thread/std::thread::swap"] -ms.assetid: df249bc7-ff81-4ff9-a6d6-5e3d9a8f56a1 helpviewer_keywords: ["std::thread [C++]", "std::thread [C++], thread", "std::thread [C++], detach", "std::thread [C++], get_id", "std::thread [C++], hardware_concurrency", "std::thread [C++], join", "std::thread [C++], joinable", "std::thread [C++], native_handle", "std::thread [C++], swap"] --- -# thread Class +# `thread` Class Defines an object that's used to observe and manage a thread of execution within an application. @@ -18,7 +17,7 @@ class thread; ## Remarks -You can use a `thread` object to observe and manage a thread of execution within an application. A thread object that's created by using the default constructor is not associated with any thread of execution. A thread object that's constructed by using a callable object creates a new thread of execution and calls the callable object in that thread. Thread objects can be moved but not copied. Therefore, a thread of execution can be associated with only one thread object. +You can use a `thread` object to observe and manage a thread of execution within an application. A thread object that's created by using the default constructor isn't associated with any thread of execution. A thread object that's constructed by using a callable object creates a new thread of execution and calls the callable object in that thread. Thread objects can be moved but not copied. Which is why a thread of execution can be associated with only one thread object. Every thread of execution has a unique identifier of type `thread::id`. The function `this_thread::get_id` returns the identifier of the calling thread. The member function `thread::get_id` returns the identifier of the thread that's managed by a thread object. For a default-constructed thread object, the `thread::get_id` method returns an object that has a value that's the same for all default-constructed thread objects and different from the value that's returned by `this_thread::get_id` for any thread of execution that could be joined at the time of the call. @@ -28,7 +27,7 @@ Every thread of execution has a unique identifier of type `thread::id`. The func |Name|Description| |----------|-----------------| -|[thread::id Class](#id_class)|Uniquely identifies the associated thread.| +|[id](#id_class)|Uniquely identifies the associated thread.| ### Public Constructors @@ -40,13 +39,13 @@ Every thread of execution has a unique identifier of type `thread::id`. The func |Name|Description| |----------|-----------------| -|[detach](#detach)|Detaches the associated thread from the `thread` object.| -|[get_id](#get_id)|Returns the unique identifier of the associated thread.| -|[hardware_concurrency](#hardware_concurrency)|Static. Returns an estimate of the number of hardware thread contexts.| -|[join](#join)|Blocks until the associated thread completes.| -|[joinable](#joinable)|Specifies whether the associated thread is joinable.| -|[native_handle](#native_handle)|Returns the implementation-specific type that represents the thread handle.| -|[swap](#swap)|Swaps the object state with a specified `thread` object.| +|[`detach`](#detach)|Detaches the associated thread from the `thread` object.| +|[`get_id`](#get_id)|Returns the unique identifier of the associated thread.| +|[`hardware_concurrency`](#hardware_concurrency)|Static. Returns an estimate of the number of hardware thread contexts.| +|[`join`](#join)|Blocks until the associated thread completes.| +|[`joinable`](#joinable)|Specifies whether the associated thread is joinable.| +|[`native_handle`](#native_handle)|Returns the implementation-specific type that represents the thread handle.| +|[`swap`](#swap)|Swaps the object state with a specified `thread` object.| ### Public Operators @@ -56,11 +55,11 @@ Every thread of execution has a unique identifier of type `thread::id`. The func ## Requirements -**Header:** \ +**Header:** `` -**Namespace:** std +**Namespace:** `std` -## thread::detach +## `detach` Detaches the associated thread. The operating system becomes responsible for releasing thread resources on termination. @@ -72,11 +71,11 @@ void detach(); After a call to `detach`, subsequent calls to [get_id](#get_id) return [id](#id_class). -If the thread that's associated with the calling object is not joinable, the function throws a [system_error](../standard-library/system-error-class.md) that has an error code of `invalid_argument`. +If the thread that's associated with the calling object isn't joinable, the function throws a [system_error](../standard-library/system-error-class.md) that has an error code of `invalid_argument`. If the thread that's associated with the calling object is invalid, the function throws a `system_error` that has an error code of `no_such_process`. -## thread::get_id +## `get_id` Returns a unique identifier for the associated thread. @@ -86,9 +85,9 @@ id get_id() const noexcept; ### Return Value -A [thread::id](#id_class) object that uniquely identifies the associated thread, or `thread::id()` if no thread is associated with the object. +A [`id`](#id_class) object that uniquely identifies the associated thread, or `id()` if no thread is associated with the object. -## thread::hardware_concurrency +## `hardware_concurrency` Static method that returns an estimate of the number of hardware thread contexts. @@ -98,7 +97,7 @@ static unsigned int hardware_concurrency() noexcept; ### Return Value -An estimate of the number of hardware thread contexts. If the value cannot be computed or is not well defined, this method returns 0. +An estimate of the number of hardware thread contexts. If the value cannot be computed or isn't well defined, this method returns 0. ### Microsoft Specific @@ -106,7 +105,7 @@ An estimate of the number of hardware thread contexts. If the value cannot be co However, on systems with more than 64 logical processors this number is capped by the number of logical processor in a single group; see [Processor Groups](/windows/win32/procthread/processor-groups). -## thread::id Class +## `id` class Provides a unique identifier for each thread of execution in the process. @@ -118,11 +117,11 @@ class thread::id { ### Remarks -The default constructor creates an object that does not compare equal to the `thread::id` object for any existing thread. +The default constructor creates an object that doesn't compare equal to the `thread::id` object for any existing thread. All default-constructed `thread::id` objects compare equal. -## thread::join +## `join` Blocks until the thread of execution that's associated with the calling object completes. @@ -132,9 +131,9 @@ void join(); ### Remarks -If the call succeeds, subsequent calls to [get_id](#get_id) for the calling object return a default [thread::id](#id_class) that does not compare equal to the `thread::id` of any existing thread; if the call does not succeed, the value that's returned by `get_id` is unchanged. +If the call succeeds, subsequent calls to [get_id](#get_id) for the calling object return a default [thread::id](#id_class) that doesn't compare equal to the `thread::id` of any existing thread; if the call doesn't succeed, the value that's returned by `get_id` is unchanged. -## thread::joinable +## `joinable` Specifies whether the associated thread is *joinable*. @@ -150,7 +149,7 @@ bool joinable() const noexcept; A thread object is *joinable* if `get_id() != id()`. -## thread::native_handle +## `native_handle` Returns the implementation-specific type that represents the thread handle. The thread handle can be used in implementation-specific ways. @@ -172,7 +171,7 @@ thread& operator=(thread&& Other) noexcept; ### Parameters -*Other*\ +*`Other`*\ A `thread` object. ### Return Value @@ -185,7 +184,7 @@ The method calls detach if the calling object is joinable. After the association is made, `Other` is set to a default-constructed state. -## thread::swap +## `swap` Swaps the object state with that of a specified `thread` object. @@ -195,10 +194,10 @@ void swap(thread& Other) noexcept; ### Parameters -*Other*\ +*`Other`*\ A `thread` object. -## thread::thread Constructor +## `thread` constructor Constructs a `thread` object. @@ -212,24 +211,24 @@ thread(thread&& Other) noexcept; ### Parameters -*F*\ +*`F`*\ An application-defined function to be executed by the thread. -*A*\ -A list of arguments to be passed to *F*. +*`A`*\ +A list of arguments to be passed to *`F`*. -*Other*\ +*`Other`*\ An existing `thread` object. ### Remarks The first constructor constructs an object that's not associated with a thread of execution. The value that's returned by a call to `get_id` for the constructed object is `thread::id()`. -The second constructor constructs an object that's associated with a new thread of execution and executes the pseudo-function `INVOKE` that's defined in [\](../standard-library/functional.md). If not enough resources are available to start a new thread, the function throws a [system_error](../standard-library/system-error-class.md) object that has an error code of `resource_unavailable_try_again`. If the call to *F* terminates with an uncaught exception, [terminate](../standard-library/exception-functions.md#terminate) is called. +The second constructor constructs an object that's associated with a new thread of execution and executes the pseudo-function `INVOKE` that's defined in [``](../standard-library/functional.md). If not enough resources are available to start a new thread, the function throws a [`system_error`](../standard-library/system-error-class.md) object that has an error code of `resource_unavailable_try_again`. If the call to *F* terminates with an uncaught exception, [`terminate`](../standard-library/exception-functions.md#terminate) is called. The third constructor constructs an object that's associated with the thread that's associated with `Other`. `Other` is then set to a default-constructed state. ## See also [Header Files Reference](../standard-library/cpp-standard-library-header-files.md)\ -[\](../standard-library/thread.md) +[``](../standard-library/thread.md)