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
+29-23Lines changed: 29 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
---
2
2
title: "Microsoft C++ language conformance table"
3
3
description: "Table of Microsoft C++ conformance updates by Visual Studio version."
4
-
ms.date: 08/05/2020
4
+
ms.date: 08/06/2020
5
5
ms.technology: "cpp-language"
6
6
ms.assetid: 475da6e9-0d78-4b4e-bd23-f41c406c4efe
7
7
author: "corob-msft"
@@ -18,7 +18,7 @@ For details on Visual Studio 2017 or Visual Studio 2019 MSVC conformance improve
18
18
19
19
## Compiler features
20
20
21
-
| Feature |Support|
21
+
| Feature |Supported|
22
22
|--|--|
23
23
|__C++03/11 Core language features__|__Supported__|
24
24
| Everything else | VS 2015 <sup>[A](#note_A)</sup> |
@@ -59,6 +59,7 @@ For details on Visual Studio 2017 or Visual Studio 2019 MSVC conformance improve
59
59
| [`P0217R3 Structured bindings`](https://wg21.link/p0217r3)| VS 2017 15.3 <sup>[17](#note_17)</sup> |
60
60
| [`P0292R2 constexpr if-statements`](https://wg21.link/p0292r2)| VS 2017 15.3 <sup>[D](#note_D)</sup> |
61
61
| [`P0305R1 Selection statements with initializers`](https://wg21.link/p0305r1)| VS 2017 15.3 <sup>[17](#note_17)</sup> |
62
+
| [`P1381R1 Reference capture of structured bindings`](https://wg21.link/P1381R1)| VS 2017 15.3 <sup>[17](#note_17)</sup> |
62
63
| [`P0245R1 Hexfloat literals`](https://wg21.link/p0245r1)| VS 2017 15.5 <sup>[17](#note_17)</sup> |
63
64
| [`N4268 Allowing more non-type template args`](https://wg21.link/n4268)| VS 2017 15.5 <sup>[17](#note_17)</sup> |
64
65
| [`N4295 Fold expressions`](https://wg21.link/n4295)| VS 2017 15.5 <sup>[17](#note_17)</sup> |
@@ -130,54 +131,57 @@ For details on Visual Studio 2017 or Visual Studio 2019 MSVC conformance improve
130
131
| [`P1907R1 Inconsistencies with non-type template parameters`](https://wg21.link/P1907R1)| VS 2019 16.6 <sup>[20](#note_20)</sup> |
131
132
| [`P1971R0 US053: Mandate the return type for return_void and return_value to be void`](https://wg21.link/P1971R0)| VS 2019 16.6 <sup>[20](#note_20)</sup> |
132
133
| [`P1971R0 US065: Apply Coroutines issue 24 from P0664R8`](https://wg21.link/P1971R0)| VS 2019 16.6 <sup>[20](#note_20)</sup> |
134
+
| [`P0388R4 Permit conversions to arrays of unknown bound`](https://wg21.link/P0388R4)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
135
+
| [`P0466R5 Layout-compatibility and Pointer-interconvertibility Traits`](https://wg21.link/P0466R5)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
136
+
| [`P0722R3 Efficient sized delete for variable sized classes`](https://wg21.link/P0722R3)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
137
+
| [`P1094R2 Nested inline namespaces`](https://wg21.link/P1094R2)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
138
+
| [`P1152R4 Deprecating volatile`](https://wg21.link/P1152R4)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
139
+
| [`P1331R2 Permitting trivial default initialization in constexpr contexts`](https://wg21.link/P1331R2)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
140
+
| [`P1358R0 2310: Type completeness and derived-to-base pointer conversions`](https://wg21.link/P1358R0)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
141
+
| [`P1452R2 On the non-uniform semantics of return-type-requirements`](https://wg21.link/P1452R2)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
142
+
| [`P1616R1 Using unconstrained TTPs with constrained templates`](https://wg21.link/P1616R1)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
143
+
| [`P1814R0 CTAD for alias templates`](https://wg21.link/P1814R0)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
144
+
| [`P1816R0 CTAD for aggregates`](https://wg21.link/P1816R0)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
145
+
| [`P1957R1 Converting from T* to bool should be considered narrowing (re: US 212)`](https://wg21.link/P1957R1)| VS 2019 16.7 <sup>[DR](#note_DR)</sup> |
146
+
| [`P1968R0 CWG 2282: Consistency with mismatched aligned/non-over-aligned allocation/deallocation functions`](https://wg21.link/P1968R0#2282)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
147
+
| [`P1969R0 CWG 2280: Matching a usual deallocation function with placement new`](https://wg21.link/CWG2280)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
148
+
| [`P1969R0 CWG 2382: Array allocation overhead for non-allocating placement new`](https://wg21.link/p1969r0#2382)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
149
+
| [`P1969R0 CWG 2441: Inline function parameters`](https://wg21.link/p1969r0#2441)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
150
+
| [`P1971R0 US052: Non-executed return statements in coroutines`](https://wg21.link/P1971R0)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
151
+
| [`P2085R0 Consistent defaulted comparisons`](https://wg21.link/P2085R0)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
| [`P1141R2 Yet another approach for constrained declarations`](https://wg21.link/P1141R2)| Partial |
137
158
| [`P0315R4 Allowing lambdas in unevaluated contexts`](https://wg21.link/P0315R4)| No |
138
-
| [`P0388R4 Permit conversions to arrays of unknown bound`](https://wg21.link/P0388R4)| No |
139
-
| [`P0466R5 Layout-compatibility and Pointer-interconvertibility Traits`](https://wg21.link/P0466R5)| No |
140
159
| [`P0634R3 Down with typename!`](https://wg21.link/P0634R3)| No |
141
-
| [`P0722R3 Efficient sized delete for variable sized classes`](https://wg21.link/P0722R3)| No |
142
160
| [`P0735R1 Interaction of memory_order_consume with release sequences`](https://wg21.link/P0735R1)| No |
143
161
| [`P0784R7 More constexpr containers`](https://wg21.link/P0784R7)| No |
144
162
| [`P0840R2 [[no_unique_address]] attribute`](https://wg21.link/P0840R2)| No |
145
163
| [`P0848R3 Conditionally trivial special member functions`](https://wg21.link/P0848R3)| No |
146
164
| [`P0960R3 Allow initializing aggregates from a parenthesized list of values`](https://wg21.link/P0960R3)| No |
147
165
| [`P1064R0 Allowing virtual function calls in constant expressions`](https://wg21.link/P1064R0)| No |
148
166
| [`P1073R3 Immediate functions`](https://wg21.link/P1073R3)| No |
149
-
| [`P1094R2 Nested inline namespaces`](https://wg21.link/P1094R2)| No |
150
167
| [`P1143R2 constinit`](https://wg21.link/P1143R2)| No |
151
-
| [`P1152R4 Deprecating volatile`](https://wg21.link/P1152R4)| No |
152
-
| [`P1236R1 Signed integers are two's complement`](https://wg21.link/P1236R1)| No |
168
+
| [`P1236R1 Signed integers are two's complement`](https://wg21.link/P1236R1)| N/A |
153
169
| [`P1327R1 Allowing dynamic_cast, polymorphic typeid in constant expressions`](https://wg21.link/P1327R1)| No |
154
-
| [`P1331R2 Permitting trivial default initialization in constexpr contexts`](https://wg21.link/P1331R2)| No |
155
170
| [`P1353R0 Missing feature-test macros`](https://wg21.link/P1353R0)| No |
156
-
| [`P1358R0 2310: Type completeness and derived-to-base pointer conversions`](https://wg21.link/P1358R0)| No |
157
-
| [`P1381R1 Reference capture of structured bindings`](https://wg21.link/P1381R1)| No |
158
-
| [`P1452R2 On the non-uniform semantics of return-type-requirements`](https://wg21.link/P1452R2)| No |
159
-
| [`P1616R1 Using unconstrained TTPs with constrained templates`](https://wg21.link/P1616R1)| No |
160
171
| [`P1668R1 Permitting unevaluated inline assembly in constexpr functions`](https://wg21.link/P1668R1)| No |
161
172
| [`P1766R1 Mitigating minor modules maladies`](https://wg21.link/P1766R1)| No |
162
173
| [`P1811R0 Relaxing redefinition restrictions for re-exportation robustness`](https://wg21.link/P1811R0)| No |
163
-
| [`P1814R0 CTAD for alias templates`](https://wg21.link/P1814R0)| No |
164
-
| [`P1816R0 CTAD for aggregates`](https://wg21.link/P1816R0)| No |
165
174
| [`P1874R1 Dynamic Initialization Order of Non-Local Variables in Modules`](https://wg21.link/P1874R1)| No |
166
-
| [`P1971R0 Core Changes for NB Comments at the Nov 2019 (Belfast) meeting`](https://wg21.link/P1971R0)| No |
167
-
| [`P1971R0 US052: Non-executed return statements in coroutines`](https://wg21.link/P1971R0)| No |
168
-
| [`P1972R0 US105 Check satisfaction of constraints for non-templates when forming pointer to function`](https://wg21.link/P1972R0)| No |
175
+
| [`P1972R0 US105: Check satisfaction of constraints for non-templates when forming pointer to function`](https://wg21.link/P1972R0)| No |
169
176
| [`P1975R0 Fixing the wording of parenthesized aggregate-initialization`](https://wg21.link/P1975R0)| No |
170
177
| [`P1979R0 Resolution to US086`](https://wg21.link/P1979R0)| No |
171
178
| [`P1980R0 CA096: Declaration matching for non-dependent requires-clauses`](https://wg21.link/P1980R0)| No |
172
-
| [`P2085R0 Consistent defaulted comparisons`](https://wg21.link/P2085R0)| No |
173
-
| [`P2103R0 US033: Allow "import" inside linkage-specifications`](https://wg21.link/P2103R0)| No |
174
-
| [`P2107R0 US064: Copy semantics of coroutine parameters`](https://wg21.link/P2107R0)| No |
175
179
176
180
## Standard library features
177
181
178
182
A more detailed listing of Standard Library features and bug fixes by product version is available on the [GitHub Microsoft STL wiki Changelog](https://github.com/microsoft/STL/wiki/Changelog) page.
179
183
180
-
| Feature |Support|
184
+
| Feature |Supported|
181
185
|--|--|
182
186
|__C++20 Standard library features__|__Supported__|
183
187
| [`P0809R0 Comparing Unordered Containers`](https://wg21.link/p0809r0)| VS 2010 <sup>[14](#note_14)</sup> |
@@ -236,6 +240,7 @@ A more detailed listing of Standard Library features and bug fixes by product ve
236
240
| [`P1645R1 constexpr for <numeric> algorithms`](https://wg21.link/P1645R1)| VS 2019 16.6 <sup>[20](#note_20)</sup> |
237
241
| [`P0415R1 constexpr For <complex> (Again)`](https://wg21.link/p0415r1)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
238
242
| [`P0476R2 <bit> bit_cast`](https://wg21.link/P0476R2)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
243
+
| [`P0528R3 Atomic Compare-And-Exchange With Padding Bits`](https://wg21.link/P0528R3)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
239
244
| [`P0674R1 make_shared() For Arrays`](https://wg21.link/p0674r1)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
240
245
| [`P0718R2 atomic<shared_ptr<T>>, atomic<weak_ptr<T>>`](https://wg21.link/p0718r2)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
241
246
| [`P1023R0 constexpr For std::array Comparisons`](https://wg21.link/P1023R0)| VS 2019 16.7 <sup>[20](#note_20)</sup> |
@@ -252,7 +257,6 @@ A more detailed listing of Standard Library features and bug fixes by product ve
252
257
| [`P0339R6 polymorphic_allocator<>`](https://wg21.link/P0339R6)| No |
253
258
| [`P0355R7 <chrono> Calendars And Time Zones`](https://wg21.link/p0355r7)| No |
254
259
| [`P0475R1 Guaranteed Copy Elision For Piecewise Construction`](https://wg21.link/P0475R1)| No |
255
-
| [`P0528R3 Atomic Compare-And-Exchange With Padding Bits`](https://wg21.link/P0528R3)| No |
256
260
| [`P0591R4 Utility Functions For Uses-Allocator Construction`](https://wg21.link/P0591R4)| No |
257
261
| [`P0608R3 Improving variant's Converting Constructor/Assignment`](https://wg21.link/P0608R3)| No |
258
262
| [`P0653R2 to_address()`](https://wg21.link/p0653r2)| No |
@@ -423,6 +427,8 @@ previous `std::experimental` version, made necessary by symlink support, bug fix
423
427
424
428
<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.
425
429
430
+
<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.
431
+
426
432
<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`.
427
433
428
434
<aname="note_C11"></a> __C11__ The Universal CRT implemented the parts of the C11 Standard Library that are required by C++17, with the exception of C99 `strftime()` E/O alternative conversion specifiers, C11 `fopen()` exclusive mode, and C11 `aligned_alloc()`. The latter is unlikely to be implemented, because C11 specified `aligned_alloc()` in a way that's incompatible with the Microsoft implementation of `free()`: namely, that `free()` must be able to handle highly aligned allocations.
0 commit comments