Skip to content

Commit f8ba5db

Browse files
authored
Merge pull request #3439 from MicrosoftDocs/master
3/11/2021 AM Publish
2 parents b04b399 + edccbb1 commit f8ba5db

7 files changed

+4160
-3651
lines changed

docs/overview/cpp-conformance-improvements-2017.md

Lines changed: 2062 additions & 0 deletions
Large diffs are not rendered by default.

docs/overview/cpp-conformance-improvements.md

Lines changed: 1293 additions & 3106 deletions
Large diffs are not rendered by default.

docs/overview/toc.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
href: ../overview/visual-cpp-in-visual-studio.md
66
- name: Overview of C++ development in Visual Studio
77
href: ../overview/overview-of-cpp-development.md
8-
- name: What's new for C++ in Visual Studio
8+
- name: What's new for C++ in Visual Studio 2019
99
href: ../overview/what-s-new-for-visual-cpp-in-visual-studio.md
10+
- name: What's new for C++ in Visual Studio 2017
11+
href: ../overview/what-s-new-for-cpp-2017.md
1012
- name: What's new for Microsoft C++ docs
1113
href: ../overview/whats-new-cpp-docs.md
12-
- name: C++ conformance improvements in Visual Studio
14+
- name: C++ conformance improvements in Visual Studio 2019
1315
href: ../overview/cpp-conformance-improvements.md
16+
- name: C++ conformance improvements in Visual Studio 2017
17+
href: ../overview/cpp-conformance-improvements-2017.md
1418
- name: Microsoft C++ language conformance
1519
href: ../overview/visual-cpp-language-conformance.md
1620
- name: Supported target platforms

docs/overview/visual-cpp-language-conformance.md

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
---
2-
title: "Microsoft C++ language conformance table"
2+
title: "Microsoft C++ language and standard library conformance table"
33
description: "Table of Microsoft C++ conformance updates by Visual Studio version."
4-
ms.date: 11/10/2020
4+
ms.date: 03/10/2021
55
ms.technology: "cpp-language"
6-
ms.assetid: 475da6e9-0d78-4b4e-bd23-f41c406c4efe
7-
author: "corob-msft"
8-
ms.author: "corob"
96
---
10-
# Microsoft C++ language conformance table
7+
# Microsoft C++ language and standard library conformance table
118

129
Standards conformance for the Microsoft C++ compiler in Visual Studio (MSVC) is a work in progress. Here's a summary of our ISO Standard C++ language and library conformance by Visual Studio version. Each compiler and standard library feature name links to the ISO Standard C++ proposal paper that describes the feature, if one is available at publication time. The **Supported** column lists the Visual Studio version in which support for the feature first appeared.
1310

@@ -164,17 +161,17 @@ For details on Visual Studio 2017 or Visual Studio 2019 MSVC conformance improve
164161
| &nbsp;&nbsp;[`P1811R0 Relaxing redefinition restrictions for re-exportation robustness`](https://wg21.link/P1811R0) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
165162
| &nbsp;&nbsp;[`P1874R1 Dynamic Initialization Order of Non-Local Variables in Modules`](https://wg21.link/P1874R1) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
166163
| &nbsp;&nbsp;[`P1975R0 Fixing the wording of parenthesized aggregate-initialization`](https://wg21.link/P1975R0) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
164+
| &nbsp;&nbsp;[`P0784R7 More constexpr containers`](https://wg21.link/P0784R7) | VS 2019 16.9 <sup>[20](#note_20)</sup> |
165+
| &nbsp;&nbsp;[`P1141R2 Yet another approach for constrained declarations`](https://wg21.link/P1141R2) | VS 2019 16.9 <sup>[20](#note_20)</sup> |
166+
| &nbsp;&nbsp;[`P1668R1 Permitting unevaluated inline assembly in constexpr functions`](https://wg21.link/P1668R1) | VS 2019 16.9 <sup>[20](#note_20)</sup> |
167167
| &nbsp;&nbsp;[`P0641R2 const mismatch with defaulted copy constructor`](https://wg21.link/P0641R2) | Partial |
168-
| &nbsp;&nbsp;[`P1141R2 Yet another approach for constrained declarations`](https://wg21.link/P1141R2) | Partial |
169168
| &nbsp;&nbsp;[`P0634R3 Down with typename!`](https://wg21.link/P0634R3) | No |
170-
| &nbsp;&nbsp;[`P0784R7 More constexpr containers`](https://wg21.link/P0784R7) | No |
171169
| &nbsp;&nbsp;[`P0840R2 [[no_unique_address]] attribute`](https://wg21.link/P0840R2) | No |
172170
| &nbsp;&nbsp;[`P1064R0 Allowing virtual function calls in constant expressions`](https://wg21.link/P1064R0) | No |
173171
| &nbsp;&nbsp;[`P1073R3 Immediate functions`](https://wg21.link/P1073R3) | No |
174172
| &nbsp;&nbsp;[`P1143R2 constinit`](https://wg21.link/P1143R2) | No |
175173
| &nbsp;&nbsp;[`P1327R1 Allowing dynamic_cast, polymorphic typeid in constant expressions`](https://wg21.link/P1327R1) | No |
176174
| &nbsp;&nbsp;[`P1353R0 Missing feature-test macros`](https://wg21.link/P1353R0) | No |
177-
| &nbsp;&nbsp;[`P1668R1 Permitting unevaluated inline assembly in constexpr functions`](https://wg21.link/P1668R1) | No |
178175
| &nbsp;&nbsp;[`P0735R1 Interaction of memory_order_consume with release sequences`](https://wg21.link/P0735R1) | N/A |
179176
| &nbsp;&nbsp;[`P1236R1 Signed integers are two's complement`](https://wg21.link/P1236R1) | N/A |
180177

@@ -258,36 +255,36 @@ A more detailed listing of Standard Library features and bug fixes by product ve
258255
| &nbsp;&nbsp;[`P2116R0 Remove tuple-like protocol support from fixed-extent span`](https://wg21.link/P2116R0) | VS 2019 16.7 <sup>[20](#note_20)</sup> |
259256
| &nbsp;&nbsp;[`P0019R8 atomic_ref`](https://wg21.link/P0019R8) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
260257
| &nbsp;&nbsp;[`P0528R3 Library support for atomic compare-and-exchange with padding bits`](https://wg21.link/P0528R3) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
261-
| &nbsp;&nbsp;[`P0811R3 midpoint(), lerp()`](https://wg21.link/P0811R3) | Partial in VS 2019 16.3, complete in 16.8 <sup>[20](#note_20)</sup> |
258+
| &nbsp;&nbsp;[`P0811R3 midpoint(), lerp()`](https://wg21.link/P0811R3) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
262259
| &nbsp;&nbsp;[`P0912R5 Library Support For Coroutines`](https://wg21.link/P0912R5) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
263260
| &nbsp;&nbsp;[`P1001R2 execution::unseq`](https://wg21.link/P1001R2) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
264261
| &nbsp;&nbsp;[`P1032R1 Miscellaneous constexpr`](https://wg21.link/P1032R1) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
265262
| &nbsp;&nbsp;[`P1065R2 constexpr INVOKE`](https://wg21.link/P1065R2) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
266263
| &nbsp;&nbsp;[`P1123R0 Editorial Guidance for merging P0019r8 and P0528r3`](https://wg21.link/P1123R0) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
267-
| &nbsp;&nbsp;[`P1135R6 The C++20 Synchronization Library`](https://wg21.link/P1135R6) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
268264
| &nbsp;&nbsp;[`P1960R0 NB Comment Changes Reviewed by SG1`](https://wg21.link/P1960R0) | VS 2019 16.8 <sup>[20](#note_20)</sup> |
265+
| &nbsp;&nbsp;[`P0339R6 polymorphic_allocator<>`](https://wg21.link/P0339R6) | VS 2019 16.9 <sup>[20](#note_20)</sup> |
266+
| &nbsp;&nbsp;[`P0660R10 <stop_token> and jthread`](https://wg21.link/p0660r10) | VS 2019 16.9 <sup>[20](#note_20)</sup> |
267+
| &nbsp;&nbsp;[`P0768R1 Library Support For The Spaceship Comparison Operator <=>`](https://wg21.link/p0768r1) | VS 2019 16.9 <sup>[20](#note_20)</sup> |
268+
| &nbsp;&nbsp;[`P1007R3 assume_aligned()`](https://wg21.link/P1007R3) | VS 2019 16.9 <sup>[20](#note_20)</sup> |
269+
| &nbsp;&nbsp;[`P1020R1 Smart Pointer Creation With Default Initialization`](https://wg21.link/P1020R1) | VS 2019 16.9 <sup>[20](#note_20)</sup> |
270+
| &nbsp;&nbsp;[`P1135R6 The C++20 Synchronization Library`](https://wg21.link/P1135R6) | VS 2019 16.9 <sup>[20](#note_20)</sup> |
271+
| &nbsp;&nbsp;[`P1771R1 Library support for [[nodiscard]] for constructors`](https://wg21.link/P1771R1) | VS 2019 16.9 <sup>[20](#note_20)</sup> |
269272
| &nbsp;&nbsp;[`P0053R7 <syncstream>`](https://wg21.link/p0053r7)<br/>&nbsp;&nbsp;[`P0753R2 osyncstream Manipulators`](https://wg21.link/p0753r2) | No |
270-
| &nbsp;&nbsp;[`P0339R6 polymorphic_allocator<>`](https://wg21.link/P0339R6) | No |
271-
| &nbsp;&nbsp;[`P0355R7 <chrono> Calendars And Time Zones`](https://wg21.link/p0355r7) | No |
273+
| &nbsp;&nbsp;[`P0355R7 <chrono> Calendars And Time Zones`](https://wg21.link/p0355r7) | Partial in VS 2019 16.9 <sup>[20](#note_20)</sup> |
272274
| &nbsp;&nbsp;[`P0408R7 Efficient access To basic_stringbuf's buffer`](https://wg21.link/p0408r7) | No |
273275
| &nbsp;&nbsp;[`P0466R5 Library support for layout-compatibility and pointer-interconvertibility traits`](https://wg21.link/p0466r5) | No |
274276
| &nbsp;&nbsp;[`P0475R1 Guaranteed Copy Elision For Piecewise Construction`](https://wg21.link/P0475R1) | No |
275277
| &nbsp;&nbsp;[`P0591R4 Utility Functions For Uses-Allocator Construction`](https://wg21.link/P0591R4) | No |
276278
| &nbsp;&nbsp;[`P0608R3 Improving variant's Converting Constructor/Assignment`](https://wg21.link/P0608R3) | No |
277279
| &nbsp;&nbsp;[`P0645R10 <format> Text Formatting`](https://wg21.link/p0645r10) | No |
278-
| &nbsp;&nbsp;[`P0660R10 <stop_token> and jthread`](https://wg21.link/p0660r10) | No |
279-
| &nbsp;&nbsp;[`P0768R1 Library Support For The Spaceship Comparison Operator <=>`](https://wg21.link/p0768r1) | Partial in VS 2019 16.0 <sup>[20](#note_20)</sup> |
280280
| &nbsp;&nbsp;[`P0784R7 Library support for more constexpr containers`](https://wg21.link/P0784R7) | Partial in VS 2019 16.7 <sup>[20](#note_20)</sup> |
281281
| &nbsp;&nbsp;[`P0896R4 <ranges>`](https://wg21.link/P0896R4) | Partial in VS 2019 16.8 <sup>[20](#note_20)</sup> |
282282
| &nbsp;&nbsp;[`P0980R1 constexpr std::string`](https://wg21.link/P0980R1) | No |
283283
| &nbsp;&nbsp;[`P1004R2 constexpr std::vector`](https://wg21.link/P1004R2) | No |
284-
| &nbsp;&nbsp;[`P1007R3 assume_aligned()`](https://wg21.link/P1007R3) | No |
285-
| &nbsp;&nbsp;[`P1020R1 Smart Pointer Creation With Default Initialization`](https://wg21.link/P1020R1) | No |
286284
| &nbsp;&nbsp;[`P1208R6 <source_location>`](https://wg21.link/P1208R6) | No |
287285
| &nbsp;&nbsp;[`P1285R0 Improving Completeness Requirements For Type Traits`](https://wg21.link/P1285R0) | N/A |
288-
| &nbsp;&nbsp;[`P1502R1 Standard Library Header Units`](https://wg21.link/P1502R1) | No |
286+
| &nbsp;&nbsp;[`P1502R1 Standard Library Header Units`](https://wg21.link/P1502R1) | Partial in VS 2019 16.9 <sup>[20](#note_20)</sup> |
289287
| &nbsp;&nbsp;[`P1614R2 Adding Spaceship <=> To The Library`](https://wg21.link/P1614R2) | Partial in VS 2019 16.7 <sup>[20](#note_20)</sup> |
290-
| &nbsp;&nbsp;[`P1771R1 Library support for [[nodiscard]] for constructors`](https://wg21.link/P1771R1) | No |
291288
| __C++17 Standard library features__ | __Supported__ |
292289
| &nbsp;&nbsp;[`LWG 2221 Formatted output operator for nullptr`](https://cplusplus.github.io/LWG/issue2221) | VS 2019 16.1 |
293290
| &nbsp;&nbsp;[`N3911 void_t`](https://wg21.link/n3911) | VS 2015 <sup>[14](#note_14)</sup> |
@@ -420,7 +417,8 @@ __VS 2019 16.4__ indicates features that are supported in Visual Studio 2019 ver
420417
__VS 2019 16.5__ indicates features that are supported in Visual Studio 2019 version 16.5.\
421418
__VS 2019 16.6__ indicates features that are supported in Visual Studio 2019 version 16.6.\
422419
__VS 2019 16.7__ indicates features that are supported in Visual Studio 2019 version 16.7.\
423-
__VS 2019 16.8__ indicates features that are supported in Visual Studio 2019 version 16.8.
420+
__VS 2019 16.8__ indicates features that are supported in Visual Studio 2019 version 16.8.\
421+
__VS 2019 16.9__ indicates features that are supported in Visual Studio 2019 version 16.9.
424422

425423
### Notes
426424

@@ -434,22 +432,21 @@ The compiler option [`/Zc:noexceptTypes`](../build/reference/zc-noexcepttypes.md
434432

435433
<a name="note_D"></a> __D__ Supported under [`/std:c++14`](../build/reference/std-specify-language-standard-version.md) with a suppressible warning, [`C4984`](../error-messages/compiler-warnings/compiler-warning-c4984.md).
436434

437-
<a name="note_E"></a> __E__ This is a wholly new implementation, incompatible with the
438-
previous `std::experimental` version, made necessary by symlink support, bug fixes, and changes in standard-required behavior. Currently, including \<filesystem> provides the new `std::filesystem` and the previous `std::experimental::filesystem`, and including \<experimental/filesystem> provides only the old experimental implementation. The experimental implementation will be REMOVED in the next ABI-breaking release of the libraries.
435+
<a name="note_E"></a> __E__ This is a wholly new implementation, incompatible with the previous `std::experimental` version, made necessary by symlink support, bug fixes, and changes in standard-required behavior. Currently, including \<filesystem> provides the new `std::filesystem` and the previous `std::experimental::filesystem`, and including \<experimental/filesystem> provides only the old experimental implementation. The experimental implementation will be REMOVED in the next ABI-breaking release of the libraries.
439436

440437
<a name="note_G"></a> __G__ Supported by a compiler intrinsic.
441438

442-
<a name="note_14"></a> __14__ These C++17/20 features are always enabled, even when [`/std:c++14`](../build/reference/std-specify-language-standard-version.md) (the default) is specified. The reason is either because the feature was implemented before the introduction of the **/std** options, or because conditional implementation was undesirably complex.
439+
<a name="note_14"></a> __14__ These C++17/20 features are always enabled, even when [`/std:c++14`](../build/reference/std-specify-language-standard-version.md) (the default) is specified. The reason is either because the feature was implemented before the introduction of the **`/std`** options, or because conditional implementation was undesirably complex.
443440

444441
<a name="note_17"></a> __17__ These features are enabled by the [`/std:c++17`](../build/reference/std-specify-language-standard-version.md) (or [`/std:c++latest`](../build/reference/std-specify-language-standard-version.md)) compiler option.
445442

446443
<a name="note_20"></a> __20__ These features are enabled by the [`/std:c++latest`](../build/reference/std-specify-language-standard-version.md) compiler option. When the C++20 implementation is complete, a new **`/std:c++20`** compiler option will be added, under which these features will also be available.
447444

448-
<a name="note_DR"></a> __DR__ These features are enabled in all [`/std`](../build/reference/std-specify-language-standard-version.md) compiler option modes. The C++ Standard committee adopted this as a retroactive Defect Report to C++11 and all later versions.
445+
<a name="note_DR"></a> __DR__ These features are enabled in all [`/std`](../build/reference/std-specify-language-standard-version.md) compiler option modes. The C++ Standard committee adopted this change as a retroactive Defect Report to C++11 and all later versions.
449446

450447
<a name="note_byte"></a> __byte__ `std::byte` is enabled by [`/std:c++17`](../build/reference/std-specify-language-standard-version.md) (or [`/std:c++latest`](../build/reference/std-specify-language-standard-version.md)), but because it can conflict with the Windows SDK headers in some cases, it has a fine-grained opt-out macro. It can be disabled by defining `_HAS_STD_BYTE` as `0`.
451448

452-
<a name="note_C11"></a> __C11__ Compiler support for C11 requires Visual Studio version 16.8, or higher. C11 library support requires Windows SDK version 20211, or higher. The Universal CRT implements the parts of the C11 Standard Library that are required by C++17, with the exception of C99 `strftime()` E/O alternative conversion specifiers, and C11 `aligned_alloc()`. The latter is unlikely to be implemented because the Windows operating system doesn't support aligned allocations.
449+
<a name="note_C11"></a> __C11__ Compiler support for C11 requires Visual Studio version 16.8, or higher. C11 library support requires Windows SDK version 20211, or higher. The Universal CRT implements the parts of the C11 Standard Library that are required by C++17, except for C99 `strftime()` E/O alternative conversion specifiers, and C11 `aligned_alloc()`. The latter is unlikely to be implemented because the Windows operating system doesn't support aligned allocations.
453450

454451
<a name="note_rem"></a> __rem__ Features removed when the [`/std:c++17`](../build/reference/std-specify-language-standard-version.md) (or [`/std:c++latest`](../build/reference/std-specify-language-standard-version.md)) compiler option is specified. These features can be re-enabled to ease the transition to newer language modes by use of these macros: `_HAS_AUTO_PTR_ETC`, `_HAS_FUNCTION_ALLOCATOR_SUPPORT`, `_HAS_OLD_IOSTREAMS_MEMBERS`, and `_HAS_UNEXPECTED`.
455452

0 commit comments

Comments
 (0)