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/cpp-conformance-improvements-2017.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@ ms.subservice: "cpp-lang"
7
7
---
8
8
# C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2017
9
9
10
-
Microsoft C/C++ in Visual Studio (MSVC) makes conformance improvements and bug fixes in every release. This article lists the improvements by major release, then by version. To jump directly to the changes for a specific version, use list below **In this article**.
10
+
Microsoft C/C++ in Visual Studio (MSVC) makes conformance improvements and bug fixes in every release. This article lists the improvements by major release, then by version. To jump directly to the changes for a specific version, use the list below **In this article**.
11
11
12
12
This document lists the changes in Visual Studio 2017. For a guide to the changes in Visual Studio 2022, see [C++ conformance improvements in Visual Studio 2022](cpp-conformance-improvements.md). For a guide to the changes in Visual Studio 2019, see [C++ conformance improvements in Visual Studio 2019](cpp-conformance-improvements-2019.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).
13
13
@@ -611,7 +611,7 @@ To fix the warning, put `extern "C"` first:
611
611
extern "C" __declspec(noinline) HRESULT __stdcall
612
612
```
613
613
614
-
This warning is off by default in Visual Studio 2017 version 15.3, and only impacts code compiled with **`/Wall`** **`/WX`**. Starting in Visual Studio 2017 version 15.5, it's enabled by default as a level 3 warning.
614
+
This warning is off by default in Visual Studio 2017 version 15.3, and only impacts code compiled with **`/Wall`** **`/WX`**. Starting in Visual Studio 2017 version 15.5, it's enabled by default as a level 3 warning.
615
615
616
616
### `decltype` and calls to deleted destructors
617
617
@@ -805,7 +805,7 @@ In earlier versions of Visual Studio, the compiler always gave a **`constexpr`**
805
805
806
806
### Removing allocator support in `std::function`
807
807
808
-
[P0302R1](https://wg21.link/p0302r1) Prior to C++17, the class template `std::function` had several constructors that took an allocator argument. However, the use of allocators in this context was problematic, and the semantics were unclear. The problem contructors have been removed.
808
+
[P0302R1](https://wg21.link/p0302r1) Prior to C++17, the class template `std::function` had several constructors that took an allocator argument. However, the use of allocators in this context was problematic, and the semantics were unclear. The problematic constructors have been removed.
809
809
810
810
### Fixes for `not_fn()`
811
811
@@ -1022,7 +1022,7 @@ To fix the error, remove the unused variable.
1022
1022
1023
1023
### Single-line comments
1024
1024
1025
-
In Visual Studio 2017 version 15.5, warnings C4001 and C4179 are no longer emitted by the C compiler. Previously, they were only emitted under the **`/Za`** compiler switch. The warnings are no longer needed because single-line comments have been part of the C standard since C99.
1025
+
In Visual Studio 2017 version 15.5, warnings C4001 and C4179 are no longer emitted by the C compiler. Previously, they were only emitted under the **`/Za`** compiler switch. The warnings are no longer needed because single-line comments have been part of the C standard since C99.
1026
1026
1027
1027
```cpp
1028
1028
/* C only */
@@ -1051,7 +1051,7 @@ When the code doesn't need to be backwards compatible, avoid the warning by remo
1051
1051
1052
1052
### `__declspec` attributes with `extern "C"` linkage
1053
1053
1054
-
In earlier versions of Visual Studio, the compiler ignored `__declspec(...)` attributes when `__declspec(...)` was applied before the `extern "C"` linkage specification. This behavior caused code to be generated that user didn't intend, with possible runtime implications. The [C4768](../error-messages/compiler-warnings/c4768.md) warning was added in Visual Studio version 15.3, but was off by default. In Visual Studio 2017 version 15.5, the warning is enabled by default.
1054
+
In earlier versions of Visual Studio, the compiler ignored `__declspec(...)` attributes when `__declspec(...)` was applied before the `extern "C"` linkage specification. This behavior caused code to be generated that the user didn't intend, with possible runtime implications. The [C4768](../error-messages/compiler-warnings/c4768.md) warning was added in Visual Studio version 15.3, but was off by default. In Visual Studio 2017 version 15.5, the warning is enabled by default.
@@ -1116,7 +1116,7 @@ error C2027: use of undefined type 'S'
1116
1116
1117
1117
### `std::is_convertible` target type
1118
1118
1119
-
`std::is_convertible` requires the target type to be a valid return type. In earlier versions of Visual Studio, the compiler incorrectly allowed abstract types, which might lead to incorrect overload resolution and unintended runtime behavior. The following code now correctly raises C2338:
1119
+
`std::is_convertible` requires the target type to be a valid return type. In earlier versions of Visual Studio, the compiler incorrectly allowed abstract types, which might lead to incorrect overload resolution and unintended runtime behavior. The following code now correctly raises C2338:
1120
1120
1121
1121
```cpp
1122
1122
#include<type_traits>
@@ -1193,7 +1193,7 @@ The warning was added in Visual Studio 2017 version 15.3, but was off by default
1193
1193
1194
1194
### Defaulted functions and `__declspec(nothrow)`
1195
1195
1196
-
The compiler previously allowed defaulted functions to be declared with `__declspec(nothrow)` when the corresponding base/member functions permitted exceptions. This behavior is contrary to the C++ standard and can cause undefined behavior at runtime. The standard requires such functions to be defined as deleted if there's an exception specification mismatch. Under **`/std:c++17`**, the following code raises C2280:
1196
+
The compiler previously allowed defaulted functions to be declared with `__declspec(nothrow)` when the corresponding base/member functions permitted exceptions. This behavior is contrary to the C++ standard and can cause undefined behavior at runtime. The standard requires such functions to be defined as deleted if there's an exception specification mismatch. Under **`/std:c++17`**, the following code raises C2280:
1197
1197
1198
1198
```cpp
1199
1199
struct A {
@@ -1441,7 +1441,7 @@ void sample(A<0> *p)
1441
1441
1442
1442
### C++20: Avoiding unnecessary decay (partial)
1443
1443
1444
-
[P0777R1](https://wg21.link/p0777r1) Adds differentiation between the concept of "decay" and that of simply removing const or reference qualifiers. New type trait `remove_reference_t` replaces `decay_t` in some contexts. Support for `remove_cvref_t` is implemented in Visual Studio 2019.
1444
+
[P0777R1](https://wg21.link/p0777r1) Adds differentiation between the concept of "decay" and that of simply removing const or reference qualifiers. New type trait `remove_reference_t` replaces `decay_t` in some contexts. Support for `remove_cvref_t` is implemented in Visual Studio 2019.
1445
1445
1446
1446
### C++17: Parallel algorithms
1447
1447
@@ -1457,7 +1457,7 @@ void sample(A<0> *p)
1457
1457
1458
1458
### C++17: Mathematical special functions
1459
1459
1460
-
[P0226R1](https://wg21.link/p0220r1) Adopts previous technical specifications for Mathematical Special Functions into the standard *`<cmath>`* header.
1460
+
[P0226R1](https://wg21.link/p0226r1) Adopts previous technical specifications for Mathematical Special Functions into the standard *`<cmath>`* header.
1461
1461
1462
1462
### C++17: Deduction guides for the standard library
1463
1463
@@ -1613,7 +1613,7 @@ In [`/permissive-`](../build/reference/permissive-standards-conformance.md) mode
1613
1613
1614
1614
```cpp
1615
1615
template <typename T>
1616
-
using X = typename T; // C7511: 'T': 'typename' keyword must be
1616
+
using X = typename T; // C7511: 'T': 'typename' keyword must be
1617
1617
// followed by a qualified name
1618
1618
```
1619
1619
@@ -1632,7 +1632,7 @@ using X = __declspec(deprecated("msg")) T; // C2760: syntax error:
1632
1632
// expected 'type specifier'
1633
1633
```
1634
1634
1635
-
To fix the error, change to code to the following (with the attribute placed before the '=' of the alias definition):
1635
+
To fix the error, change the code to the following (with the attribute placed before the '=' of the alias definition):
0 commit comments