Microsoft C/C++ 语言符合性

Microsoft C/C++ 语言符合性

我们正致力于 Visual Studio (MSVC) 中 Microsoft C/C++ 编译器的标准符合性。 下面概述了 ISO 标准 C 和 C++ 语言,以及依据 Visual Studio 版本的库一致性。 每个 C++ 编译器和标准库功能名称都有一个指向介绍该功能的 ISO 标准 C++ 建议文章的链接(如果在发布时可用)。 “支持”列中列出了首次出现支持该功能的 Visual Studio 版本。

有关一致性改进的详细信息,请参阅 Visual Studio 中的 C++ 一致性改进。 有关其他更改的列表,请参阅 Visual Studio 中 Visual C++ 的新增功能。 若要了解早期版本中的一致性更改,请参阅 Visual C++ 更改历史记录和 2003 至 2015 各版本中 Visual C++ 的新增功能。 若要获取 C++ 团队的最新资讯,请访问 C++ 团队博客。

Note

Visual Studio 2015、2017、2019 和 2022 版本之间没有二进制中断性变更。 有关详细信息,请参阅 Visual Studio 版本之间的 C++ 二进制兼容性

C++ 编译器功能

Feature

Supported

C++03/11 核心语言功能

Supported

Everything else

VS 2015 A

两阶段名称查找

VS 2017 15.7 B

N2634 Expression SFINAE

VS 2017 15.7

N1653 C99 preprocessor

VS 2019 16.6 C

C++03/11 核心语言功能(缺陷报告)

Supported

C++14 核心语言功能

Supported

N3323 Tweaked wording for contextual conversions

VS 2013

N3472 Binary literals

VS 2015

N3638 auto and decltype(auto) return types

VS 2015

N3648 init-captures

VS 2015

N3649 Generic lambdas

VS 2015

N3760 [[deprecated]] attribute

VS 2015

N3778 Sized deallocation

VS 2015

N3781 Digit separators

VS 2015

N3651 Variable templates

VS 2015 Update 2

N3652 Extended constexpr

VS 2017 15.0

N3653 Default member initializers for aggregates

VS 2017 15.0

C++17 核心语言功能

Supported

N4086 Removing trigraphs

VS 2010 14

N3922 New rules for auto with braced-init-lists

VS 2015 14

N4051 typename in template template-parameters

VS 2015 14

N4266 Attributes for namespaces and enumerators

VS 2015 14

N4267 u8 character literals

VS 2015 14

N4230 Nested namespace definitions

VS 2015.3 17

N3928 Terse static_assert

VS 2017 15.0 17

P0184R0 Generalized range-based for-loops

VS 2017 15.0 14

P0188R1 [[fallthrough]] attribute

VS 2017 15.0 17

P0001R1 Removing the register keyword

VS 2017 15.3 17

P0002R1 Removing operator++ for bool

VS 2017 15.3 17

P0018R3 Capturing *this by value

VS 2017 15.3 17

P0028R4 Using attribute namespaces without repetition

VS 2017 15.3 17

P0061R1 __has_include

VS 2017 15.3 14

P0138R2 Direct-list-init of fixed enums from integers

VS 2017 15.3 17

P0170R1 constexpr lambdas

VS 2017 15.3 17

P0189R1 [[nodiscard]] attribute

VS 2017 15.3 17

P0212R1 [[maybe_unused]] attribute

VS 2017 15.3 17

P0217R3 Structured bindings

VS 2017 15.3 17

P0292R2 constexpr if-statements

VS 2017 15.3 D

P0305R1 Selection statements with initializers

VS 2017 15.3 17

P1381R1 Reference capture of structured bindings

VS 2017 15.3 17

P0245R1 Hexfloat literals

VS 2017 15.5 17

N4268 Allowing more non-type template args

VS 2017 15.5 17

N4295 Fold expressions

VS 2017 15.5 17

P0003R5 Removing dynamic-exception-specifications

VS 2017 15.5 17

P0012R1 Adding noexcept to the type system

VS 2017 15.5 17

P0035R4 Over-aligned dynamic memory allocation

VS 2017 15.5 17

P0386R2 Inline variables

VS 2017 15.5 17

P0522R0 Matching template template-parameters to compatible arguments

VS 2017 15.5 17

P0036R0 Removing some empty unary folds

VS 2017 15.5 17

N4261 Fixing qualification conversions

VS 2017 15.7 17

P0017R1 Extended aggregate initialization

VS 2017 15.7 17

P0091R3 Template argument deduction for class templates P0512R0 Class template argument deduction issues

VS 2017 15.7 17

P0127R2 Declaring non-type template parameters with auto

VS 2017 15.7 17

P0135R1 Guaranteed copy elision

VS 2017 15.6

P0136R1 Rewording inheriting constructors

VS 2017 15.7 17

P0137R1 std::launder

VS 2017 15.7 17

P0145R3 Refining expression evaluation order P0400R0 Order of evaluation of function arguments

VS 2017 15.7 17

P0195R2 Pack expansions in using-declarations

VS 2017 15.7 17

P0283R2 Ignoring unrecognized attributes

VS 2015 14

C++17 核心语言功能(缺陷报告)

Supported

P0702R1 Fixing class template argument deduction for initializer-list ctors

VS 2017 15.7 17

P0961R1 Relaxing the structured bindings customization point finding rules

VS 2019 16.0 17

P0969R0 Allowing structured bindings to accessible members

VS 2019 16.0 17

P0588R1 Simplifying implicit lambda capture

VS 2019 16.4 17

P1771R1 [[nodiscard]] for constructors

VS 2019 16.4 17

P1825R0 Merged wording for P0527R1 and P1155R3, more implicit moves

VS 2019 16.4 17

P0929R2 Checking for abstract class types

VS 2019 16.5 17

P0962R1 Relaxing the range-for loop customization point finding rules

VS 2019 16.5 17

P0859R0 CWG 1581: When are constexpr member functions defined

VS 2019 16.7 E 中的部分,VS 2022 17.1 中已满

P1009R2 Array size deduction in new-expressions

VS 2019 16.7 17

P1286R2 Contra CWG DR1778

VS 2019 16.8 17

C++20 核心语言功能

Supported

P0641R2 const mismatch with defaulted copy constructor

VS 2015 14

P0704R1 Fixing const lvalue ref-qualified pointers to members

VS 2015 14

P1041R4 Make char16_t/char32_t string literals be UTF-16/32

VS 2015 14

P1330R0 Changing the active member of a union inside constexpr

VS 2017 15.0 14

P0972R0 noexcept For zero(), min(), max()

VS 2017 15.7 14

P0515R3 Three-way (spaceship) comparison operator <=>

VS 2019 16.0 20

P0941R2 Feature-test macros

VS 2019 16.0 14

P1008R1 Prohibiting aggregates with user-declared constructors

VS 2019 16.0 20

P0329R4 Designated initialization

VS 2019 16.1 20

P0846R0 ADL and function templates that are not visible

VS 2019 16.1 20

P0409R2 Allowing lambda-capture [=, this]

VS 2019 16.2 20

P0428R2 Familiar template syntax for generic lambdas

VS 2019 16.2 20

P0624R2 Default constructible and assignable stateless lambdas

VS 2019 16.2 20

P0780R2 Allowing pack expansion in lambda init-capture

VS 2019 16.2 20

P0806R2 Deprecate implicit capture of this via [=]

VS 2019 16.2 20

P1120R0 Consistency improvements for <=> and other comparison operators

VS 2019 16.2 20

P1185R2 <=> != ==

VS 2019 16.2 20

P0734R0 Concepts

VS 2019 16.3 20

P0857R0 Fixing functionality gaps in constraints

VS 2019 16.3 20

P1084R2 Today's return-type-requirements are insufficient

VS 2019 16.3 20

P0892R2 Conditional explicit

VS 2019 16.4 20

P1091R3 Extending structured bindings to be more like variable declarations

VS 2019 16.4 20

P1099R5 Using enum

VS 2019 16.4 20

P1186R3 When do you actually use <=>

VS 2019 16.4 20

P1630R1 Spaceship needs a tune-up

VS 2019 16.4 20

P0306R4 Adding __VA_OPT__ for comma omission and comma deletion

VS 2019 16.5。 为了提供更好的向后兼容性,所有语言版本中的 __VA_OPT__ 下启用了 /Zc:preprocessor。

P0614R1 Range-based for-loops with initializers

VS 2019 16.5 20

P0683R1 Default member initializers for bit-fields

VS 2019 16.5 20

P1002R1 try-catch blocks in constexpr functions

VS 2019 16.5 20

P1161R3 Deprecate uses of the comma operator in subscripting expressions

VS 2019 16.5 20

P1301R4 [[nodiscard("message")]]

VS 2019 16.5 20

P1703R1 Recognizing header unit imports requires full preprocessing

VS 2019 16.5 20

P1946R0 Allow defaulting comparisons by value

VS 2019 16.5 20

P0479R5 [[likely]] and [[unlikely]] attributes

VS 2019 16.6 20

P0692R1 Relaxing access checking on specializations

VS 2019 16.6 14

P0732R2 Class types in non-type template parameters

VS 2019 16.6 20

P1139R2 Address wording issues related to ISO 10646

VS 2019 16.6 14

P1907R1 Inconsistencies with non-type template parameters

VS 2019 16.6 20

P1971R0 US053: Mandate the return type for return_void and return_value to be void

VS 2019 16.6 20

P1971R0 US065: Apply Coroutines issue 24 from P0664R8

VS 2019 16.6 20

P1979R0 Resolution to US086

VS 2019 16.6 20

P0388R4 Permit conversions to arrays of unknown bound

VS 2019 16.7 20

P0466R5 Layout-compatibility and Pointer-interconvertibility Traits

VS 2019 16.7 20

P0722R3 Efficient sized delete for variable sized classes

VS 2019 16.7 20

P1094R2 Nested inline namespaces

VS 2019 16.7 20

P1152R4 Deprecating volatile

VS 2019 16.7 20

P1331R2 Permitting trivial default initialization in constexpr contexts

VS 2019 16.7 20

P1358R0 2310: Type completeness and derived-to-base pointer conversions

VS 2019 16.7 20

P1452R2 On the non-uniform semantics of return-type-requirements

VS 2019 16.7 20

P1616R1 Using unconstrained TTPs with constrained templates

VS 2019 16.7 20

P1814R0 CTAD for alias templates

VS 2019 16.7 20

P1816R0 CTAD for aggregates

VS 2019 16.7 20

P1957R1 Converting from T* to bool should be considered narrowing (re: US 212)

VS 2019 16.7 DR

P1968R0 CWG 2282: Consistency with mismatched aligned/non-over-aligned allocation/deallocation functions

VS 2019 16.7 20

P1969R0 CWG 2280: Matching a usual deallocation function with placement new

VS 2019 16.7 20

P1969R0 CWG 2382: Array allocation overhead for non-allocating placement new

VS 2019 16.7 20

P1969R0 CWG 2441: Inline function parameters

VS 2019 16.7 20

P1971R0 US052: Non-executed return statements in coroutines

VS 2019 16.7 20

P1972R0 US105: Check satisfaction of constraints for non-templates when forming pointer to function

VS 2019 16.7 20

P1980R0 CA096: Declaration matching for non-dependent requires-clauses

VS 2019 16.7 20

P2082R1 Fixing CTAD for aggregates

VS 2019 16.7 20

P2085R0 Consistent defaulted comparisons

VS 2019 16.7 20

P2103R0 US033: Allow "import" inside linkage-specifications

VS 2019 16.7 20

P2107R0 US064: Copy semantics of coroutine parameters

VS 2019 16.7 20

P0912R5 Coroutines

VS 2019 16.8 20

P1103R3 Modules

VS 2019 16.8 20

P0315R4 Allowing lambdas in unevaluated contexts

VS 2019 16.8 20

P0848R3 Conditionally trivial special member functions

VS 2019 16.8 20

P0960R3 Allow initializing aggregates from a parenthesized list of values

VS 2019 16.8 20

P1766R1 Mitigating minor modules maladies

VS 2019 16.8 20

P1811R0 Relaxing redefinition restrictions for re-exportation robustness

VS 2019 16.8 20

P1874R1 Dynamic Initialization Order of Non-Local Variables in Modules

VS 2019 16.8 20

P1975R0 Fixing the wording of parenthesized aggregate-initialization

VS 2019 16.8 20

P0634R3 Down with typename!

VS 2019 16.9 20

P0784R7 More constexpr containers

VS 2019 16.9 20

P0840R2 [[no_unique_address]] attribute

VS 2019 16.9 20

P1064R0 Allowing virtual function calls in constant expressions

VS 2019 16.9 20

P1141R2 Yet another approach for constrained declarations

VS 2019 16.9 20

P1327R1 Allowing dynamic_cast, polymorphic typeid in constant expressions

VS 2019 16.9 20

P1668R1 Permitting unevaluated inline assembly in constexpr functions

VS 2019 16.9 20

P1073R3 Immediate functions

VS 2019 16.10 20

P1143R2 constinit

VS 2019 16.10 20

P1353R0 Missing feature-test macros

VS 2019 16.10 20

P0735R1 Interaction of memory_order_consume with release sequences

N/A

P1236R1 Signed integers are two's complement

N/A

C++23 核心语言功能

Supported

P0330R8 Literal Suffix for (signed) size_t

no

P0847R7 Deducing this

no

P0849R8 auto(x): decay-copy in the language

no

P1102R2 Down with ()!

no

P1169R4 static operator()

no

P1401R5 Narrowing contextual conversions to bool

no

P1467R9 Extended floating-point types and standard names

no

P1774R8 Portable assumptions

no

P1787R6 Declarations and where to find them

no

P1847R4 Make declaration order layout mandated

VS 2022 17.0 23

P1938R3 if consteval

no

P1949R7 C++ Identifier Syntax using Unicode Standard Annex 31

no

P2029R4 Proposed resolution for core issues 411, 1656, and 2333; numeric and universal character escapes in character and string literals

no

P2036R3 Change scope of lambda trailing-return-type

no

P2071R2 Named universal character escapes

no

P2128R6 Multidimensional subscript operator

no

P2156R1 Allow Duplicate Attributes

no

P2173R1 Attributes on Lambda-Expressions

no

P2186R2 Remove Garbage Collection Support

VS 2022 17.0 23

P2201R1 Mixed string literal concatenation

no

P2223R2 Trimming whitespaces before line splicing

no

P2242R3 Non-literal variables (and labels and gotos) in constexpr functions

no

P2246R1 Character encoding of diagnostic text

VS 2022 17.0 23

P2266R3 Simpler implicit move

no

P2280R4 Using unknown pointers and references in constant expressions

no

P2290R3 Delimited escape sequences

no

P2295R6 Support for UTF-8 as a portable source file encoding

no

P2314R4 Character sets and encodings

no

P2316R2 Consistent character literal encoding

VS 2022 17.0 23

P2324R2 Labels at the end of compound statements (C compatibility)

no

P2327R1 De-deprecating volatile compound operations

no

P2334R1 preprocessing directives elifdef and elifndef

no

P2360R0 Extend init-statement to allow alias-declaration

no

P2362R3 Remove non-encodable wide character literals and multicharacter wide character literals

no

P2437R1 Support for #warning

no

P2448R2 Relaxing some constexpr restrictions

no

P2460R2 Relax requirements on wchar_t to match existing practices

no

P2468R2 The Equality Operator You Are Looking For

no

P2493R0 Missing feature test macros for C++20 core papers

no

P2513R4 char8_t Compatibility and Portability Fix

VS 2022 17.4 DR

P2579R0 Mitigation strategies for P2036 ”Changing scope for lambda trailing-return-type”

no

P2582R1 Wording for class template argument deduction from inherited constructors

no

C++ 标准库功能

GitHub Microsoft STL wiki Changelog 页上提供了按产品版本列出的标准库功能和 bug 修复的详细列表。

Feature

Supported

C++14 标准库功能

Supported

N3462 SFINAE-Friendly result_of

VS 2015.2

N3302 constexpr For

VS 2015

N3469 constexpr For

VS 2015

N3470 constexpr For

VS 2015

N3471 constexpr For , ,

VS 2015

N3545 integral_constant::operator()()

VS 2015

N3642 UDLs For , (1729ms, "meow"s, etc.)

VS 2015

N3644 Null Forward Iterators

VS 2015

N3654 quoted()

VS 2015

N3657 Heterogeneous Associative Lookup

VS 2015

N3658 integer_sequence

VS 2015

N3659 shared_mutex (Timed)

VS 2015

N3668 exchange()

VS 2015

N3669 Fixing constexpr Member Functions Without const

VS 2015

N3670 get()

VS 2015

N3671 Dual-Range equal(), is_permutation(), mismatch()

VS 2015

N3778 Sized Deallocation

VS 2015

N3779 UDLs For (3.14i, etc.)

VS 2015

N3789 constexpr For

VS 2015

N3887 tuple_element_t

VS 2015

N3891 Renaming shared_mutex (Timed) To shared_timed_mutex

VS 2015

N3346 Minimal Container Element Requirements

VS 2013

N3421 Transparent Operator Functors (less<>, etc.)

VS 2013

N3655 Alias Templates For (decay_t, etc.)

VS 2013

N3656 make_unique()

VS 2013

C++17 标准库功能

Supported

N3911 void_t

VS 2015 14

N4089 Safe Conversions In unique_ptr

VS 2015 14

N4169 invoke()

VS 2015 14

N4190 Removing auto_ptr, random_shuffle(), And Old Stuff

VS 2015 F

N4258 noexcept Cleanups

VS 2015 14

N4259 uncaught_exceptions()

VS 2015 14

N4277 Trivially Copyable reference_wrapper

VS 2015 14

N4279 insert_or_assign()/try_emplace() For map/unordered_map

VS 2015 14

N4280 size(), empty(), data()

VS 2015 14

N4366 Precisely Constraining unique_ptr Assignment

VS 2015 14

N4387 Improving pair And tuple

VS 2015.2 14

N4389 bool_constant

VS 2015 14

N4508 shared_mutex (Untimed)

VS 2015.2 14

N4510 Supporting Incomplete Types In vector/list/forward_list

VS 2013 14

N4562 Library Fundamentals: sample()

VS 2017 15.0

N4562 Library Fundamentals:

VS 2017 15.0

N4562 Library Fundamentals: P0337R0 Deleting polymorphic_allocator Assignment

VS 2017 15.6

N4562 Library Fundamentals:

VS 2017 15.0

N4562 Library Fundamentals:

VS 2017 15.0

N4562 Library Fundamentals: apply()

VS 2017 15.0

N4562 Library Fundamentals: Boyer-Moore search() P0253R1 Fixing Searcher Return Types

VS 2017 15.3 17

P0003R5 Removing Dynamic Exception Specifications

VS 2017 15.5 17

P0004R1 Removing Deprecated Iostreams Aliases

VS 2015.2 F

P0005R4 not_fn() P0358R1 Fixes For not_fn()

VS 2017 15.5 17

P0006R0 Variable Templates For Type Traits (is_same_v, etc.)

VS 2015.2 14

P0007R1 as_const()

VS 2015.2 14

P0013R1 Logical Operator Type Traits (conjunction, etc.)

VS 2015.2 14

P0024R2 Parallel Algorithms P0336R1 Renaming Parallel Execution Policies P0394R4 Parallel Algorithms Should terminate() For Exceptions P0452R1 Unifying Parallel Algorithms

VS 2017 15.7 G

P0025R1 clamp()

VS 2015.3

P0030R1 hypot(x, y, z)

VS 2017 15.7

P0031R0 constexpr For (Again) And

VS 2017 15.3 17

P0032R3 Homogeneous Interface For variant/any/optional

VS 2017 15.0

P0033R1 Rewording enable_shared_from_this

VS 2017 15.5 14

P0040R3 Extending Memory Management Tools

VS 2017 15.3 17

P0063R3 C11 Standard Library

VS 2015 C11、14

P0067R5 Elementary String Conversions

VS 2019 16.4

P0074R0 owner_less<>

VS 2015.2 14

P0077R2 is_callable, is_nothrow_callable

VS 2017 15.0

P0083R3 Splicing Maps And Sets P0508R0 Clarifying insert_return_type

VS 2017 15.5 17

P0084R2 Emplace Return Type

VS 2017 15.3 17

P0088R3

VS 2017 15.0

P0092R1 floor(), ceil(), round(), abs()

VS 2015.2 14

P0152R1 atomic::is_always_lock_free

VS 2017 15.3 17

P0154R1 hardware_destructive_interference_size, etc.

VS 2017 15.3 17

P0156R0 Variadic lock_guard

VS 2015.2 14

P0156R2 Renaming Variadic lock_guard to scoped_lock

VS 2017 15.3 17

P0163R0 shared_ptr::weak_type

VS 2017 15.0

P0174R2 Deprecating Vestigial Library Parts

VS 2017 15.5 17

P0185R1 is_swappable, is_nothrow_swappable

VS 2015.3

P0209R2 make_from_tuple()

VS 2017 15.0

P0218R1 P0219R1 Relative Paths For Filesystem P0317R1 Directory Entry Caching For Filesystem P0392R0 Supporting string_view In Filesystem Paths P0430R2 Supporting Non-POSIX Filesystems P0492R2 Resolving NB Comments for Filesystem

VS 2017 15.7 H

P0220R1 Library Fundamentals V1

VS 2017 15.6

P0226R1 Mathematical Special Functions

VS 2017 15.7

P0254R2 Integrating string_view And std::string

VS 2017 15.0

P0258R2 has_unique_object_representations

VS 2017 15.3 I

P0272R1 Non-const basic_string::data()

VS 2015.3

P0295R0 gcd(), lcm()

VS 2017 15.3 17

P0298R3 std::byte

VS 2017 15.3 17、J

P0302R1 Removing Allocator Support In std::function

VS 2017 15.5 17

P0307R2 Making Optional Greater Equal Again

VS 2017 15.0

P0393R3 Making Variant Greater Equal

VS 2017 15.0

P0403R1 UDLs For ("meow"sv, etc.)

VS 2017 15.3 17

P0414R2 shared_ptr, shared_ptr P0497R0 Fixing shared_ptr For Arrays

VS 2017 15.5 14

P0418R2 atomic compare_exchange memory_order Requirements

VS 2017 15.3 14

P0426R1 constexpr For char_traits

VS 2017 15.7

P0433R2 Integrating template deduction for class templates into the standard library P0739R0 Improving class template argument deduction integration into the standard library

VS 2017 15.7

P0435R1 Overhauling common_type P0548R1 Tweaking common_type and duration

VS 2017 15.3 14

P0504R0 Revisiting in_place_t/in_place_type_t/in_place_index_t

VS 2017 15.0

P0505R0 constexpr For (Again)

VS 2017 15.3 17

P0510R0 Rejecting variants Of Nothing, Arrays, References, And Incomplete Types

VS 2017 15.0

P0513R0 Poisoning hash P0599R1 noexcept hash

VS 2017 15.3 14

P0516R0 Marking shared_future Copying As noexcept

VS 2017 15.3 14

P0517R0 Constructing future_error From future_errc

VS 2017 15.3 14

P0521R0 Deprecating shared_ptr::unique()

VS 2017 15.5 17

P0558R1 Resolving atomic Named Base Class Inconsistencies

VS 2017 15.3 14

P0595R2 std::is_constant_evaluated()

VS 2019 16.5 20

P0602R4 Propagating Copy/Move Triviality In variant/optional

VS 2017 15.317

P0604R0 Changing is_callable/result_of To invoke_result, is_invocable, is_nothrow_invocable

VS 2017 15.3 17

P0607R0 Inline Variables for the Standard Library

VS 2017 15.5 17

P0618R0 Deprecating

VS 2017 15.5 17

C++17 标准库功能(缺陷报告)

Supported

P0682R1 Repairing Elementary String Conversions

VS 2017 15.7 17

P1164R1 Making create_directory() Intuitive

VS 2019 16.0 14

C++20 标准库功能

Supported

P0809R0 Comparing Unordered Containers

VS 2010 14

P0858R0 Constexpr Iterator Requirements

VS 2017 15.3 17

P0777R1 Avoiding Unnecessary Decay

VS 2017 15.7 14

P0550R2 remove_cvref

VS 2019 16.0 20

P0318R1 unwrap_reference, unwrap_ref_decay

VS 2019 16.1 20

P0457R2 starts_with()/ends_with() For basic_string/basic_string_view

VS 2019 16.1 20

P0458R2 contains() For Ordered And Unordered Associative Containers

VS 2019 16.1 20

P0646R1 list/forward_list remove()/remove_if()/unique() Return size_type

VS 2019 16.1 20

P0769R2 shift_left(), shift_right()

VS 2019 16.1 20

P0887R1 type_identity

VS 2019 16.1 20

P0020R6 atomic, atomic, atomic

VS 2019 16.2 20

P0463R1 endian

VS 2019 16.2 20

P0482R6 char8_t: A type for UTF-8 characters and strings

VS 2019 16.2 20

P0600R1 [[nodiscard]] For The STL, Part 1

VS 2019 16.2 20

P0653R2 to_address()

VS 2019 16.2 20

P0754R2

VS 2019 16.2 20

P0771R1 noexcept For std::function's Move Constructor

VS 2019 16.2 20

P0487R1 Fixing operator>>(basic_istream&, CharT*)

VS 2019 16.3 20

P0616R0 Using move() In

VS 2019 16.3 20

P0758R1 is_nothrow_convertible

VS 2019 16.3 20

P0898R3 Standard Library Concepts

VS 2019 16.3 20

P0919R3 Heterogeneous Lookup For Unordered Containers

VS 2019 16.3 20

P1754R1 Rename Concepts to standard_case

VS 2019 16.4 20

P0325R4 to_array from LFTS with updates

VS 2019 16.5 20

P0340R3 SFINAE-Friendly underlying_type

VS 2019 16.5 14

P0356R5 bind_front()

VS 2019 16.5 20

P0439R0 enum class memory_order

VS 2019 16.5 20

P0553R4 Rotating And Counting Functions

VS 2019 16.5 20

P0556R3 ispow2(), ceil2(), floor2(), log2p1()

VS 2019 16.5 20

P0595R2 is_constant_evaluated()

VS 2019 16.5 20

P0631R8 Math Constants

VS 2019 16.5 20

P0655R1 visit()

VS 2019 16.5 20

P0738R2 istream_iterator Cleanup

VS 2019 16.5 14

P0767R1 Deprecating is_pod

VS 2019 16.5 20

P0966R1 string::reserve() Should Not Shrink

VS 2019 16.5 20

P1209R0 erase_if(), erase()

VS 2019 16.5 20

P1227R2 Signed std::ssize(), Unsigned span::size()

VS 2019 16.5 20

P1355R2 Narrow Contract For ceil2()

VS 2019 16.5 20

P1357R1 is_bounded_array, is_unbounded_array

VS 2019 16.5 20

P1612R1 Relocating endian To

VS 2019 16.5 20

P1651R0 bind_front() Should Not Unwrap reference_wrapper

VS 2019 16.5 20

P1690R1 Refining Heterogeneous Lookup For Unordered Containers

VS 2019 16.5 20

P1902R1 Missing Feature-Test Macros 2017-2019

VS 2019 16.5 14

P0122R7 P1024R3 Enhancing span usability P1085R2 Removing span comparisons P1394R4 Range constructor for span P1872R0 span should have size_type, not index_type

VS 2019 16.6 20

P0202R3 constexpr for and exchange()

VS 2019 16.6 20

P0357R3 Supporting Incomplete Types In reference_wrapper

VS 2019 16.6 20

P0619R4 Removing C++17-Deprecated Features In C++20

VS 2019 16.6 20

P0879R0 constexpr for swapping functions

VS 2019 16.6 20

P0883R2 Fixing atomic initialization

VS 2019 16.6 14

P0935R0 Eradicating Unnecessarily Explicit Default Constructors

VS 2019 16.6 14

P1006R1 constexpr For pointer_traits::pointer_to()

VS 2019 16.6 20

P1165R1 Consistently Propagating Stateful Allocators In basic_string's operator+()

VS 2019 16.6 14

P1423R3 char8_t backward compatibility remediation

VS 2019 16.6 20

P1645R1 constexpr for algorithms

VS 2019 16.6 20

P0415R1 constexpr For (Again)

VS 2019 16.7 20

P0476R2 bit_cast

VS 2019 16.7 20

P0528R3 Atomic Compare-And-Exchange With Padding Bits

VS 2019 16.7 20

P0586R2 Integer comparison functions

VS 2019 16.7 20

P0674R1 make_shared() For Arrays

VS 2019 16.7 20

P0718R2 atomic>, atomic>

VS 2019 16.7 20

P1023R0 constexpr For std::array Comparisons

VS 2019 16.7 20

P1115R3 erase()/erase_if() Return size_type

VS 2019 16.7 20

P1831R1 Deprecating volatile in the standard library

VS 2019 16.7 20

P1871R1 Concept traits should be named after concepts

VS 2019 16.7 20

P1956R1 has_single_bit(), bit_ceil(), bit_floor(), bit_width()

VS 2019 16.7 20

P1964R2 Replacing boolean With boolean-testable

VS 2019 16.7 20

P1976R2 Fixed-size span construction from dynamic range

VS 2019 16.7 20

P2091R0 Issues with range access CPOs

VS 2019 16.7 20

P2102R0 Make "implicit expression variations" more explicit

VS 2019 16.7 20

P2116R0 Remove tuple-like protocol support from fixed-extent span

VS 2019 16.7 20

P0019R8 atomic_ref

VS 2019 16.8 20

P0528R3 Library support for atomic compare-and-exchange with padding bits

VS 2019 16.8 20

P0811R3 midpoint(), lerp()

VS 2019 16.8 20

P0912R5 Library Support For Coroutines

VS 2019 16.8 20

P1001R2 execution::unseq

VS 2019 16.8 20

P1032R1 Miscellaneous constexpr

VS 2019 16.8 20

P1065R2 constexpr INVOKE

VS 2019 16.8 20

P1123R0 Editorial Guidance for merging P0019r8 and P0528r3

VS 2019 16.8 20

P1960R0 NB Comment Changes Reviewed by SG1

VS 2019 16.8 20

P0339R6 polymorphic_allocator<>

VS 2019 16.9 20

P0660R10 and jthread

VS 2019 16.9 20

P0768R1 Library Support For The Spaceship Comparison Operator <=>

VS 2019 16.9 20

P1007R3 assume_aligned()

VS 2019 16.9 20

P1020R1 Smart Pointer Creation With Default Initialization

VS 2019 16.9 20

P1135R6 The C++20 Synchronization Library

VS 2019 16.9 20

P1771R1 Library support for [[nodiscard]] for constructors

VS 2019 16.9 20

P0053R7 P0753R2 osyncstream Manipulators

VS 2019 16.10 20

P0355R7 Calendars And Time Zones

VS 2019 16.10 20abi

P0408R7 Efficient access To basic_stringbuf's buffer

VS 2019 16.10 20

P0466R5 Library support for layout-compatibility and pointer-interconvertibility traits

VS 2019 16.10 20

P0475R1 Guaranteed Copy Elision For Piecewise Construction

VS 2019 16.10 20

P0591R4 Utility Functions For Uses-Allocator Construction

VS 2019 16.10 20

P0608R3 Improving variant's Converting Constructor/Assignment

VS 2019 16.10 20

P0645R10 Text Formatting

VS 2019 16.10 20abi

P0784R7 Library support for more constexpr containers

VS 2019 16.10 20

P0896R4

VS 2019 16.10 20abi

P0980R1 constexpr std::string

VS 2019 16.10 20,P

P1004R2 constexpr std::vector

VS 2019 16.10 20,P

P1208R6

VS 2019 16.10 20

P1502R1 Standard Library Header Units

VS 2019 16.10 20

P1614R2 Adding Spaceship <=> To The Library

VS 2019 16.10 20

P1285R0 Improving Completeness Requirements For Type Traits

N/A

C++20 标准库功能(缺陷报告)

Supported

P2325R3 Views Should Not Be Required To Be Default Constructible

VS 2022 17.0 20abi

P2328R1 join_view should join all views of ranges

VS 2022 17.0 20abi

P2367R0 Remove misuses of list-initialization from clause 24 ranges

VS 2022 17.0 20abi

P2259R1 Partial LWG issue resolution: repairing Input Range Adaptors and counted_iterator

VS 2022 17.0 23

C++23 标准库功能

Supported

P0288R9 move_only_function

VS 2022 17.2 23

P0323R12

VS 2022 17.3 23

P0401R6 Providing Size Feedback In The Allocator Interface

VS 2022 17.0 23

P0448R4

VS 2022 17.1 23

P0627R6 unreachable()

VS 2022 17.2 23

P0798R8 Monadic Operations For optional

VS 2022 17.2 23

P0849R8 auto(x): decay-copy In The Language

VS 2022 17.4 23

P0881R7

VS 2022 17.4 23

P0943R6 Supporting C Atomics In C++

VS 2022 17.1 23

P1048R1 is_scoped_enum

VS 2022 17.0 23

P1072R10 basic_string::resize_and_overwrite

VS 2022 17.1 23

P1132R7 out_ptr(), inout_ptr()

VS 2022 17.0 23

P1147R1 Printing volatile Pointers

VS 2022 17.1 23

P1206R7 Conversions From Ranges To Containers

VS 2022 17.4 23

P1272R4 byteswap()

VS 2022 17.1 23

P1328R1 constexpr type_info::operator==()

VS 2022 17.4 23

P1413R3 Deprecate aligned_storage And aligned_union

VS 2022 17.3 23

P1425R4 Iterator Pair Constructors For stack And queue

VS 2022 17.1 23

P1518R2 Stop Overconstraining Allocators In Container Deduction Guides

VS 2022 17.1 23

P1659R3 ranges::starts_with, ranges::ends_with

VS 2022 17.1 23

P1679R3 contains() For basic_string/basic_string_view

VS 2022 17.0 23

P1682R3 to_underlying() For Enumerations

VS 2022 17.0 23

P1899R3 views::stride

VS 2022 17.4 23

P1951R1 Default Template Arguments For pair's Forwarding Constructor

VS 2022 17.0 23

P1989R2 Range Constructor For string_view

VS 2022 17.0 23

P2077R3 Heterogeneous Erasure Overloads For Associative Containers

VS 2022 17.2 23

P2136R3 invoke_r()

VS 2022 17.1 23

P2162R2 Inheriting from std::variant

VS 2022 17.0 17

P2166R1 Prohibit basic_string and basic_string_view from being constructed from nullptr

VS 2022 17.0 23,R

P2186R2 Removed garbage collection support

VS 2022 17.0 23,Q

P2251R1 Require span And basic_string_view To Be Trivially Copyable

VS 2022 17.1 23

P2273R3 constexpr unique_ptr

VS 2022 17.3 23

P2291R3 constexpr Integral

VS 2022 17.4 23

P2302R4 ranges::contains, ranges::contains_subrange

VS 2022 17.4 23

P2321R2 std::zip

在 VS 2022 17.5 中部分支持 23

P2322R6 ranges::fold_left, ranges::fold_right, etc.

VS 2022 17.5 23

P2387R3 Pipe Support For User-Defined Range Adaptors

VS 2022 17.4 23

P2393R1 Cleaning Up Integer-Class Types

VS 2022 17.2 23

P2401R0 Conditional noexcept For exchange()

VS 2022 17.1 23

P2408R5 Ranges Iterators As Inputs To Non-Ranges Algorithms

VS 2022 17.4 23

P2417R2 More constexpr bitset

VS 2022 17.4 23

P2419R2 Clarify Handling Of Encodings In Localized Formatting Of chrono Types

VS 2022 17.4 23

P2438R2 string::substr() &&

VS 2022 17.4 23

P2440R1 ranges::iota, ranges::shift_left, ranges::shift_right

VS 2022 17.4 23

P2441R2 views::join_with

VS 2022 17.4 23

P2442R1 Windowing Range Adaptors: views::chunk, views::slide

VS 2022 17.3 23

P2443R1 views::chunk_by

VS 2022 17.3 23

P2445R1 forward_like()

VS 2022 17.4 23

P2446R2 views::as_rvalue

VS 2022 17.4 23

P2465R3 Standard Library Modules std And std.compat

no

P2494R2 Relaxing Range Adaptors To Allow Move-Only Types

VS 2022 17.4 23

P2499R0 string_view Range Constructor Should Be explicit

VS 2022 17.4 23

P2508R1 basic_format_string, format_string, wformat_string

VS 2022 17.5 23

P2517R1 Conditional noexcept For apply()

VS 2022 17.4 23

P2520R0 move_iterator Should Be A Random-Access Iterator

VS 2022 17.4 23

P2549R1 unexpected::error()

VS 2022 17.3 23

一起列出的一组论文表示一项标准功能以及一个或多个批准的改进或扩展。 这些功能可一起实现。

C 标准库功能

Feature

Supported

C99 标准库功能

Supported

替代拼写宏

VS 2015

宽字符支持

VS 2015

中的复杂支持

在 VS 2015 中部分支持 K

类型泛型数学函数

VS 2019 16.8 2104

其他浮点特征

VS 2015

十六进制 float printf 说明符 %A、%a

VS 2015

扩展整数类型

VS 2015

vscanf 和 中的 系列

VS 2015

中的新数学函数

VS 2015

数学库错误条件处理 (math_errhandling)

VS 2015

浮点环境访问

VS 2015

%lf 的 printf 转换说明符

VS 2015

snprintf 中的 函数系列

VS 2015

boolean 中的 类型

VS 2015

va_copy 宏

VS 2015

其他 strftime 转换说明符

在 VS 2015 中部分支持 L

C11 标准库功能

Supported

对齐说明符

VS 2019 16.8 C11、2104

aligned_alloc

No M

无返回说明符

VS 2019 16.8 C11、2104

线程处理支持

yes

原子支持

experimental

char16_t、 char32_t

VS 2019 16.8 C11

删除了 gets()

VS 2019 16.8 C11、N

gets_s()

VS 2019 16.8 C11

边界检查接口 (*_s API)

在 VS 2015 中部分支持 C11、O

fopen

"x" 选项

VS 2019 16.8 C11

Static assertions

VS 2019 16.8 C11、2104

quick_exit

VS 2019 16.8 C11

VS 2019 16.8 C11

浮点特征

VS 2019 16.8 C11

C11 线程

VS 2022 17.8 C11

Supported values

否:尚未实现。

部分:实现不完整。 有关详细信息,请参阅说明部分。

VS 2010:在 Visual Studio 2010 中支持的功能。

VS 2013:在 Visual Studio 2013 中支持的功能。

VS 2015:在 Visual Studio 2015 (RTW) 中支持的功能。

VS 2015.2 和 VS 2015.3 分别表示在 Visual Studio 2015 Update 2 和 Visual Studio 2015 Update 3 中支持的功能。

VS 2017 15.0:在 Visual Studio 2017 版本 15.0 (RTW) 中支持的功能。

VS 2017 15.3:在 Visual Studio 2017 版本 15.3 中支持的功能。

VS 2017 15.5:在 Visual Studio 2017 版本 15.5 中支持的功能。

VS 2017 15.7:在 Visual Studio 2017 版本 15.7 中支持的功能。

VS 2019 16.0:在 Visual Studio 2019 版本 16.0 (RTW) 中支持的功能。

VS 2019 16.1:在 Visual Studio 2019 版本 16.1 中支持的功能。

VS 2019 16.2:在 Visual Studio 2019 版本 16.2 中支持的功能。

VS 2019 16.3:在 Visual Studio 2019 版本 16.3 中支持的功能。

VS 2019 16.4:在 Visual Studio 2019 版本 16.4 中支持的功能。

VS 2019 16.5:在 Visual Studio 2019 版本 16.5 中支持的功能。

VS 2019 16.6:在 Visual Studio 2019 版本 16.6 中支持的功能。

VS 2019 16.7:在 Visual Studio 2019 版本 16.7 中支持的功能。

VS 2019 16.8:在 Visual Studio 2019 版本 16.8 中支持的功能。

VS 2019 16.9:在 Visual Studio 2019 版本 16.9 中支持的功能。

VS 2019 16.10:在 Visual Studio 2019 版本 16.10 中支持的功能。

VS 2022 17.0:在 Visual Studio 2022 版本 17.0 中支持的功能。

VS 2022 17.1:在 Visual Studio 2022 版本 17.1 中支持的功能。

VS 2022 17.2:在 Visual Studio 2022 版本 17.2 中支持的功能。

VS 2022 17.3:在 Visual Studio 2022 版本 17.3 中支持的功能。

VS 2022 17.4:在 Visual Studio 2022 版本 17.4 中支持的功能。

VS 2022 17.5:在 Visual Studio 2022 版本 17.5 中支持的功能。

Notes

A 在 /std:c++14 模式下,动态异常规范仍没有实现,且 throw() 仍被视为 __declspec(nothrow) 的同义词。 在 C++17 中,动态异常规范大部分已被 P0003R5 删除,一个残留部分除外:throw() 已被弃用,并被要求与 noexcept 同义。 在 /std:c++17 模式下,MSVC 现在通过赋予 throw() 与 noexcept 相同的行为(即通过终止强制执行)来符合标准。

编译器选项 /Zc:noexceptTypes 请求获取 __declspec(nothrow) 的旧行为。 将来版本的 C++ 中可能会删除 throw()。 为了有助于迁移代码来响应标准和 Microsoft 实现中的这些更改,在 /std:c++17 和 /permissive- 下添加了针对异常规范问题的新编译器警告。

B 在 /permissive- 模式下的 Visual Studio 2017 版本 15.7 中受支持。 有关详细信息,请参阅 Two-phase name lookup support comes to MSVC。

C 在 Visual Studio 2019 版本 16.6 和更高版本中,编译器通过 /Zc:preprocessor 选项来完全实现标准 C99 预处理器。 (从 Visual Studio 2017 版本 15.8 到 16.5,编译器通过 /experimental:preprocessor 编译器选项支持标准 C99 预处理器。)指定编译器选项 /std:c11 或 /std:c17 时,此选项默认处于启用状态。

D 在 /std:c++14 下受支持,但出现可取消的警告 C4984。

E 实现足以支持 C++20 标准库。 完整实现需要二进制中断性变更。

F 指定 /std:c++17 或更高版本的编译器选项会导致功能被删除。 要重新启用这些功能(以轻松转换为较新的语言模式),请使用下面这些宏:_HAS_AUTO_PTR_ETC、_HAS_FUNCTION_ALLOCATOR_SUPPORT、_HAS_OLD_IOSTREAMS_MEMBERS 和 _HAS_UNEXPECTED。

G C++17 的并行算法库是完整的。 “完整”并不意味着每种算法在各种情况下都是并行执行的。 最重要的算法已并行执行。 即使实现不并行执行算法,也会提供执行策略签名。 中心内部标头 中包含以下“并行算法注释”:C++ 允许实现将并行算法作为系列算法的调用实现。 此实现并行执行几个常见算法调用,但不是全部。

以下算法并行执行:

adjacent_difference、adjacent_find、、all_of、 any_ofcountcount_ifequalexclusive_scanfindfind_endfind_first_offind_iffind_if_notfor_eachfor_each_ninclusive_scanis_heapis_heap_untilis_partitionedis_sortedis_sorted_untilmismatchnone_ofpartitionreduceremoveremove_ifreplacereplace_ifsearchsearch_nset_differenceset_intersectionsortstable_sorttransformtransform_exclusive_scantransform_inclusive_scantransform_reduce

这些算法目前还没有被并行化:

这些算法表明目标硬件上的并行性能没有显著提升。 只用于复制或置换无分支的元素的所有算法通常会受内存带宽限制:

copy、、copy_n、fillfill_n、move、reversereverse_copyrotaterotate_copy、shift_left、、 shift_rightswap_ranges

这些算法在对用户并行性要求方面存在混淆;可能出现在上述类别中:

generate、generate_n

这些算法的有效并行性可能不可行:

partial_sort、partial_sort_copy

这些算法尚未进行评估。 库可能在将来的版本中实现并行化:

copy_if、、includes、inplace_mergelexicographical_compare、max_element、mergemin_element、 minmax_elementnth_elementpartition_copyremove_copyremove_copy_ifreplace_copyreplace_copy_ifset_symmetric_differenceset_unionstable_partitionuniqueunique_copy

H 此为全新实现,与之前的 std::experimental 版本不兼容,这对符号链接支持、bug 修复以及更改必须符合标准的行为而言是必不可少的。 目前, 同时提供新的 std::filesystem 和以前的 std::experimental::filesystem。

标头只提供旧的实验性实现。 在下一突破性 ABI 版本的库中,实验性实现将被删除。

I 受编译器内部函数支持。

Jstd::byte 由 /std:c++17 或更高版本启用,但由于它在某些情况下可能会与 Windows SDK 标头冲突,因此它有细化的选择退出宏。 若要禁用它,请将 _HAS_STD_BYTE 定义为 0。

K MSVC 不支持 _Complex 关键字或本机复杂类型。 通用 CRT 使用特定于实现的宏来达到同样的效果。 有关详细信息,请参阅 C 复杂数学支持。

L 通用 CRT 不实现 strftimeE 和 O 替代转换修饰符。 这些修饰符将被忽略(例如,%Oe 的行为与 %e 相同)。 基础区域设置 API 不支持这些修饰符。

M 通用 CRT 不实现 C11 aligned_alloc,但提供 _aligned_malloc 和 _aligned_free。 由于 Windows 操作系统不支持对齐的分配,因此不太可能实现此函数。

N 声明已被删除,但函数的导出仍保持后向兼容性。

O 某些边界检查函数未实现,或者具有不同的签名,或者不是 C11 或 C17 标准的一部分。 以下函数未实现:abort_handler_s、ignore_handler_s、memset_s、set_constraint_handler_s、snprintf_s、snwprintf_s、strerrorlen_s、vsnwprintf_s。 以下函数具有不同的签名:gmtime_s、localtime_s、qsort_s、strtok_s、vsnprintf_s、wcstok_s。 以下函数不会出现在标准中:clearerr_s、fread_s。

P Visual Studio 2019 版本 16.10 中增加了支持。 在 Visual Studio 2022 版本 17.0 中增加了对 Clang 的支持。

Q 这会删除 declare_reachable、undeclare_reachabledeclare_no_pointers、undeclare_no_pointers、get_pointer_safety。 以前,这些函数不起作用。

R 这是常见的源中断性变更。 但是,以前在运行时具有未定义行为的代码现在会被拒绝并出现编译器错误。

S 输入范围适配器,counted_iterator 在 VS 2022 17.0 中实现。 Visual Studio 2019 版本 16.11 的未来更新计划纳入这些更改。

T 以 C++ 编译时 (),当前支持 /std:c++latest。 以 C 编译时(/std:c11 和 /std:c17)尚不支持

14 即使指定了 /std:c++14(默认值),这些 C++17 和 C++20 功能也始终处于启用状态。 这是因为在引入 /std 选项之前实现了该功能,或者因为条件实现异常复杂。

17 这些功能由 或更高版本编译器选项启用/std:c++17。

20 在 Visual Studio 2019 版本 16.10 的所有版本中,这些功能由 /std:c++latest 编译器选项启用。 Visual Studio 2019 版本 16.11 添加了 /std:c++20 编译器选项以实现这些功能。

20abi 由于发布后仍在不断改进 C++20 标准 ,因此 的格式部分(它依赖于 ),还有 中的范围工厂和范围适配器(这都需要 view 概念)都只能在 下使用/std:c++latest。 与 WG21 达成无需进一步 ABI 中断性变更的协议后,预计这些功能将位于 /std:c++20 下。 在 Visual Studio 2019 版本 16.11 和更高版本中,在 编译器选项下启用 /std:c++20 的其余部分和适用于范围的算法。

23 在 Visual Studio 2022 版本 17.0 和更高版本中,这些功能由 /std:c++latest 编译器选项启用。

C11 编译器对 C11 和 C17 的支持需要 Visual Studio 2019 版本 16.8 或更高版本。 除非另有注明,否则 C11 和 C17 库支持需要 Windows SDK 内部版本 10.0.20211.0 或更高版本。 若要详细了解如何安装对 C11 和 C17 的支持,请参阅在 Visual Studio 中安装 C11 和 C17 支持。

DR 这些功能在所有 C++ /std 编译器选项模式中启用。 C++ 标准委员会将此更改作为对 C++ 11 和所有更高版本的追溯缺陷报告。

2104 C11 库对此功能的支持需要 Windows SDK 内部版本 10.0.20348.0(版本 2104)或更高版本。

See also

C++ 语言参考

C++ 标准库

Visual Studio 中的 C++ 符合性改进

Visual Studio 中 Visual C++ 的新增功能

Visual C++ 更改历史记录 (2003 - 2015)

Visual C++ 新增功能 (2003 - 2015)

C++ 团队博客

相关推荐

Win11垂直同步怎么开?详细步骤图解实现流畅体验
bet28365365体育投注

Win11垂直同步怎么开?详细步骤图解实现流畅体验

07-18 👁️ 1461
揭幕!世界杯主场馆!中国造!
365bet在线官网

揭幕!世界杯主场馆!中国造!

07-04 👁️ 2304
华为手机电话录音保存在哪里
best365官网登陆

华为手机电话录音保存在哪里

08-05 👁️ 525