Skip to content

Commit f4c0470

Browse files
Merge pull request #5643 from Rageking8/fix-and-update-cpp-conformance-improvements-2017
Fix and update "C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2017"
2 parents d13e272 + 7b4b656 commit f4c0470

1 file changed

Lines changed: 11 additions & 11 deletions

File tree

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ ms.subservice: "cpp-lang"
77
---
88
# C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2017
99

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**.
1111

1212
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).
1313

@@ -611,7 +611,7 @@ To fix the warning, put `extern "C"` first:
611611
extern "C" __declspec(noinline) HRESULT __stdcall
612612
```
613613
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.
615615
616616
### `decltype` and calls to deleted destructors
617617
@@ -805,7 +805,7 @@ In earlier versions of Visual Studio, the compiler always gave a **`constexpr`**
805805
806806
### Removing allocator support in `std::function`
807807
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.
809809
810810
### Fixes for `not_fn()`
811811
@@ -1022,7 +1022,7 @@ To fix the error, remove the unused variable.
10221022

10231023
### Single-line comments
10241024

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.
10261026

10271027
```cpp
10281028
/* C only */
@@ -1051,7 +1051,7 @@ When the code doesn't need to be backwards compatible, avoid the warning by remo
10511051

10521052
### `__declspec` attributes with `extern "C"` linkage
10531053

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.
10551055

10561056
```cpp
10571057
__declspec(noinline) extern "C" HRESULT __stdcall // C4768
@@ -1116,7 +1116,7 @@ error C2027: use of undefined type 'S'
11161116

11171117
### `std::is_convertible` target type
11181118

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:
11201120

11211121
```cpp
11221122
#include <type_traits>
@@ -1193,7 +1193,7 @@ The warning was added in Visual Studio 2017 version 15.3, but was off by default
11931193
11941194
### Defaulted functions and `__declspec(nothrow)`
11951195
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:
11971197
11981198
```cpp
11991199
struct A {
@@ -1441,7 +1441,7 @@ void sample(A<0> *p)
14411441

14421442
### C++20: Avoiding unnecessary decay (partial)
14431443

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.
14451445

14461446
### C++17: Parallel algorithms
14471447

@@ -1457,7 +1457,7 @@ void sample(A<0> *p)
14571457

14581458
### C++17: Mathematical special functions
14591459

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.
14611461

14621462
### C++17: Deduction guides for the standard library
14631463

@@ -1613,7 +1613,7 @@ In [`/permissive-`](../build/reference/permissive-standards-conformance.md) mode
16131613

16141614
```cpp
16151615
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
16171617
// followed by a qualified name
16181618
```
16191619

@@ -1632,7 +1632,7 @@ using X = __declspec(deprecated("msg")) T; // C2760: syntax error:
16321632
// expected 'type specifier'
16331633
```
16341634

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):
16361636

16371637
```cpp
16381638
template <typename T>

0 commit comments

Comments
 (0)