You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/overview/visual-cpp-language-conformance.md
+22-25Lines changed: 22 additions & 25 deletions
Original file line number
Diff line number
Diff line change
@@ -1,13 +1,10 @@
1
1
---
2
-
title: "Microsoft C++ language conformance table"
2
+
title: "Microsoft C++ language and standard library conformance table"
3
3
description: "Table of Microsoft C++ conformance updates by Visual Studio version."
4
-
ms.date: 11/10/2020
4
+
ms.date: 03/10/2021
5
5
ms.technology: "cpp-language"
6
-
ms.assetid: 475da6e9-0d78-4b4e-bd23-f41c406c4efe
7
-
author: "corob-msft"
8
-
ms.author: "corob"
9
6
---
10
-
# Microsoft C++ language conformance table
7
+
# Microsoft C++ language and standard library conformance table
11
8
12
9
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.
13
10
@@ -164,17 +161,17 @@ For details on Visual Studio 2017 or Visual Studio 2019 MSVC conformance improve
164
161
| [`P1811R0 Relaxing redefinition restrictions for re-exportation robustness`](https://wg21.link/P1811R0)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
165
162
| [`P1874R1 Dynamic Initialization Order of Non-Local Variables in Modules`](https://wg21.link/P1874R1)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
166
163
| [`P1975R0 Fixing the wording of parenthesized aggregate-initialization`](https://wg21.link/P1975R0)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
164
+
| [`P0784R7 More constexpr containers`](https://wg21.link/P0784R7)| VS 2019 16.9 <sup>[20](#note_20)</sup> |
165
+
| [`P1141R2 Yet another approach for constrained declarations`](https://wg21.link/P1141R2)| VS 2019 16.9 <sup>[20](#note_20)</sup> |
166
+
| [`P1668R1 Permitting unevaluated inline assembly in constexpr functions`](https://wg21.link/P1668R1)| VS 2019 16.9 <sup>[20](#note_20)</sup> |
167
167
| [`P0641R2 const mismatch with defaulted copy constructor`](https://wg21.link/P0641R2)| Partial |
168
-
| [`P1141R2 Yet another approach for constrained declarations`](https://wg21.link/P1141R2)| Partial |
169
168
| [`P0634R3 Down with typename!`](https://wg21.link/P0634R3)| No |
170
-
| [`P0784R7 More constexpr containers`](https://wg21.link/P0784R7)| No |
171
169
| [`P0840R2 [[no_unique_address]] attribute`](https://wg21.link/P0840R2)| No |
172
170
| [`P1064R0 Allowing virtual function calls in constant expressions`](https://wg21.link/P1064R0)| No |
173
171
| [`P1073R3 Immediate functions`](https://wg21.link/P1073R3)| No |
174
172
| [`P1143R2 constinit`](https://wg21.link/P1143R2)| No |
175
173
| [`P1327R1 Allowing dynamic_cast, polymorphic typeid in constant expressions`](https://wg21.link/P1327R1)| No |
176
174
| [`P1353R0 Missing feature-test macros`](https://wg21.link/P1353R0)| No |
177
-
| [`P1668R1 Permitting unevaluated inline assembly in constexpr functions`](https://wg21.link/P1668R1)| No |
178
175
| [`P0735R1 Interaction of memory_order_consume with release sequences`](https://wg21.link/P0735R1)| N/A |
179
176
| [`P1236R1 Signed integers are two's complement`](https://wg21.link/P1236R1)| N/A |
180
177
@@ -258,36 +255,36 @@ A more detailed listing of Standard Library features and bug fixes by product ve
258
255
| [`P2116R0 Remove tuple-like protocol support from fixed-extent span`](https://wg21.link/P2116R0)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
259
256
| [`P0019R8 atomic_ref`](https://wg21.link/P0019R8)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
260
257
| [`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
-
| [`P0811R3 midpoint(), lerp()`](https://wg21.link/P0811R3)|Partial in VS 2019 16.3, complete in 16.8 <sup>[20](#note_20)</sup> |
258
+
| [`P0811R3 midpoint(), lerp()`](https://wg21.link/P0811R3)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
262
259
| [`P0912R5 Library Support For Coroutines`](https://wg21.link/P0912R5)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
263
260
| [`P1001R2 execution::unseq`](https://wg21.link/P1001R2)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
264
261
| [`P1032R1 Miscellaneous constexpr`](https://wg21.link/P1032R1)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
265
262
| [`P1065R2 constexpr INVOKE`](https://wg21.link/P1065R2)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
266
263
| [`P1123R0 Editorial Guidance for merging P0019r8 and P0528r3`](https://wg21.link/P1123R0)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
267
-
| [`P1135R6 The C++20 Synchronization Library`](https://wg21.link/P1135R6)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
268
264
| [`P1960R0 NB Comment Changes Reviewed by SG1`](https://wg21.link/P1960R0)| VS 2019 16.8 <sup>[20](#note_20)</sup> |
265
+
| [`P0339R6 polymorphic_allocator<>`](https://wg21.link/P0339R6)| VS 2019 16.9 <sup>[20](#note_20)</sup> |
266
+
| [`P0660R10 <stop_token> and jthread`](https://wg21.link/p0660r10)| VS 2019 16.9 <sup>[20](#note_20)</sup> |
267
+
| [`P0768R1 Library Support For The Spaceship Comparison Operator <=>`](https://wg21.link/p0768r1)| VS 2019 16.9 <sup>[20](#note_20)</sup> |
268
+
| [`P1007R3 assume_aligned()`](https://wg21.link/P1007R3)| VS 2019 16.9 <sup>[20](#note_20)</sup> |
269
+
| [`P1020R1 Smart Pointer Creation With Default Initialization`](https://wg21.link/P1020R1)| VS 2019 16.9 <sup>[20](#note_20)</sup> |
270
+
| [`P1135R6 The C++20 Synchronization Library`](https://wg21.link/P1135R6)| VS 2019 16.9 <sup>[20](#note_20)</sup> |
271
+
| [`P1771R1 Library support for [[nodiscard]] for constructors`](https://wg21.link/P1771R1)| VS 2019 16.9 <sup>[20](#note_20)</sup> |
269
272
| [`P0053R7 <syncstream>`](https://wg21.link/p0053r7)<br/> [`P0753R2 osyncstream Manipulators`](https://wg21.link/p0753r2)| No |
270
-
| [`P0339R6 polymorphic_allocator<>`](https://wg21.link/P0339R6)| No |
271
-
| [`P0355R7 <chrono> Calendars And Time Zones`](https://wg21.link/p0355r7)| No |
273
+
| [`P0355R7 <chrono> Calendars And Time Zones`](https://wg21.link/p0355r7)| Partial in VS 2019 16.9 <sup>[20](#note_20)</sup> |
272
274
| [`P0408R7 Efficient access To basic_stringbuf's buffer`](https://wg21.link/p0408r7)| No |
273
275
| [`P0466R5 Library support for layout-compatibility and pointer-interconvertibility traits`](https://wg21.link/p0466r5)| No |
274
276
| [`P0475R1 Guaranteed Copy Elision For Piecewise Construction`](https://wg21.link/P0475R1)| No |
275
277
| [`P0591R4 Utility Functions For Uses-Allocator Construction`](https://wg21.link/P0591R4)| No |
276
278
| [`P0608R3 Improving variant's Converting Constructor/Assignment`](https://wg21.link/P0608R3)| No |
277
279
| [`P0645R10 <format> Text Formatting`](https://wg21.link/p0645r10)| No |
278
-
| [`P0660R10 <stop_token> and jthread`](https://wg21.link/p0660r10)| No |
279
-
| [`P0768R1 Library Support For The Spaceship Comparison Operator <=>`](https://wg21.link/p0768r1)| Partial in VS 2019 16.0 <sup>[20](#note_20)</sup> |
280
280
| [`P0784R7 Library support for more constexpr containers`](https://wg21.link/P0784R7)| Partial in VS 2019 16.7 <sup>[20](#note_20)</sup> |
281
281
| [`P0896R4 <ranges>`](https://wg21.link/P0896R4)| Partial in VS 2019 16.8 <sup>[20](#note_20)</sup> |
282
282
| [`P0980R1 constexpr std::string`](https://wg21.link/P0980R1)| No |
283
283
| [`P1004R2 constexpr std::vector`](https://wg21.link/P1004R2)| No |
284
-
| [`P1007R3 assume_aligned()`](https://wg21.link/P1007R3)| No |
285
-
| [`P1020R1 Smart Pointer Creation With Default Initialization`](https://wg21.link/P1020R1)| No |
286
284
| [`P1208R6 <source_location>`](https://wg21.link/P1208R6)| No |
287
285
| [`P1285R0 Improving Completeness Requirements For Type Traits`](https://wg21.link/P1285R0)| N/A |
288
-
| [`P1502R1 Standard Library Header Units`](https://wg21.link/P1502R1)|No|
286
+
| [`P1502R1 Standard Library Header Units`](https://wg21.link/P1502R1)|Partial in VS 2019 16.9 <sup>[20](#note_20)</sup>|
289
287
| [`P1614R2 Adding Spaceship <=> To The Library`](https://wg21.link/P1614R2)| Partial in VS 2019 16.7 <sup>[20](#note_20)</sup> |
290
-
| [`P1771R1 Library support for [[nodiscard]] for constructors`](https://wg21.link/P1771R1)| No |
291
288
|__C++17 Standard library features__|__Supported__|
292
289
| [`LWG 2221 Formatted output operator for nullptr`](https://cplusplus.github.io/LWG/issue2221)| VS 2019 16.1 |
293
290
| [`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
420
417
__VS 2019 16.5__ indicates features that are supported in Visual Studio 2019 version 16.5.\
421
418
__VS 2019 16.6__ indicates features that are supported in Visual Studio 2019 version 16.6.\
422
419
__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.
424
422
425
423
### Notes
426
424
@@ -434,22 +432,21 @@ The compiler option [`/Zc:noexceptTypes`](../build/reference/zc-noexcepttypes.md
434
432
435
433
<aname="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).
436
434
437
-
<aname="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
+
<aname="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.
439
436
440
437
<aname="note_G"></a> __G__ Supported by a compiler intrinsic.
441
438
442
-
<aname="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
+
<aname="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.
443
440
444
441
<aname="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.
445
442
446
443
<aname="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.
447
444
448
-
<aname="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
+
<aname="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.
449
446
450
447
<aname="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`.
451
448
452
-
<aname="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
+
<aname="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.
453
450
454
451
<aname="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`.
0 commit comments