Microsoft C/C++-Sprachkonformität nach Visual Studio-Version

Die Standardkonformität für den Microsoft C/C++-Compiler in Visual Studio (MSVC) ist in Bearbeitung. Nachfolgend finden Sie eine Zusammenfassung der C- und C++-ISO-Standardsprache und der Bibliothekskonformität geordnet nach Visual Studio-Versionen. Jeder Name eines Features im C++-Compiler und in der Standardbibliothek verweist auf das C++-ISO-Standardvorschlagsdokument, in dem das Feature beschrieben ist, falls zum Zeitpunkt der Veröffentlichung ein solches Dokument verfügbar ist. Die Spalte Unterstützt gibt die Visual Studio-Version an, in der das Feature zum ersten Mal unterstützt wurde.

Ausführliche Informationen zu Konformitätsverbesserungen finden Sie im Artikel zu Verbesserungen der C++-Konformität in Visual Studio. Eine Liste weiterer Änderungen finden Sie unter Neuerungen bei Visual C++ in Visual Studio. Kompatibilitätsänderungen in früheren Versionen finden Sie unter Änderungsverlauf von Visual C++ von 2003 bis 2015 und Visual C++ What's New 2003 through 2015 (Visual C++ – Neuerungen von 2003 bis 2015). Aktuelle Nachrichten vom C++-Team finden Sie im C++-Teamblog.

Hinweis

Es gibt keine binären Breaking Changes zwischen Visual Studio 2015, 2017, 2019 und 2022. Weitere Informationen finden Sie unter Binärkompatibilität von C++ zwischen Visual Studio-Versionen.

C++-Compilerfeatures

Funktion Unterstützt
Hauptsprachfeatures von C++03/11 Unterstützt
 Alle anderen VS 2015 A
 Zwei-Phasen Namenssuche VS 2017 15.7 B
N2634 Expression SFINAE VS 2017 15.7
N1653 C99 preprocessor VS 2019 16.6 C
Hauptsprachfeatures von C++03/11 (Fehlerberichte) Unterstützt
Hauptsprachfeatures von C++14 Unterstützt
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
Hauptsprachfeatures von C++17 Unterstützt
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
Hauptsprachfeatures von C++17 (Fehlerberichte) Unterstützt
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 Partiell in VS 2019 16.7 E
P1009R2 Array size deduction in new-expressions VS 2019 16.7 17
P1286R2 Contra CWG DR1778 VS 2019 16.8 17
Hauptsprachfeatures von C++20 Unterstützt
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 <chrono> 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. Um eine bessere Abwärtskompatibilität zu gewährleisten, __VA_OPT__ ist dies unter /Zc:preprocessor allen Sprachversionen möglich.
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
P1236R1 Signed integers are two's complement
Hauptsprachfeatures von C++23 Unterstützt
P0330R8 Literal Suffix for (signed) size_t nein
P0847R7 Deducing this Nein
P0849R8 auto(x): decay-copy in the language Nein
P1102R2 Down with ()! Nein
P1169R4 static operator() Nein
P1401R5 Narrowing contextual conversions to bool Nein
P1467R9 Extended floating-point types and standard names Nein
P1774R8 Portable assumptions Nein
P1787R6 Declarations and where to find them nein
P1847R4 Make declaration order layout mandated VS 2022 17.0 23
P1938R3 if consteval nein
P1949R7 C++ Identifier Syntax using Unicode Standard Annex 31 Nein
P2029R4 Proposed resolution for core issues 411, 1656, and 2333; numeric and universal character escapes in character and string literals Nein
P2036R3 Change scope of lambda trailing-return-type Nein
P2071R2 Named universal character escapes Nein
P2128R6 Multidimensional subscript operator Nein
P2156R1 Allow Duplicate Attributes Nein
P2173R1 Attributes on Lambda-Expressions nein
P2186R2 Remove Garbage Collection Support VS 2022 17.0 23
P2201R1 Mixed string literal concatenation nein
P2223R2 Trimming whitespaces before line splicing Nein
P2242R3 Non-literal variables (and labels and gotos) in constexpr functions nein
P2246R1 Character encoding of diagnostic text VS 2022 17.0 23
P2266R3 Simpler implicit move nein
P2280R4 Using unknown pointers and references in constant expressions Nein
P2290R3 Delimited escape sequences Nein
P2295R6 Support for UTF-8 as a portable source file encoding Nein
P2314R4 Character sets and encodings nein
P2316R2 Consistent character literal encoding VS 2022 17.0 23
P2324R2 Labels at the end of compound statements (C compatibility) nein
P2327R1 De-deprecating volatile compound operations Nein
P2334R1 preprocessing directives elifdef and elifndef Nein
P2360R0 Extend init-statement to allow alias-declaration Nein
P2362R3 Remove non-encodable wide character literals and multicharacter wide character literals Nein
P2437R1 Support for #warning Nein
P2448R2 Relaxing some constexpr restrictions Nein
P2460R2 Relax requirements on wchar_t to match existing practices Nein
P2468R2 The Equality Operator You Are Looking For Nein
P2493R0 Missing feature test macros for C++20 core papers Nein
P2493R0 Missing feature test macros for C++20 core papers nein
P2513R4 char8_t Compatibility and Portability Fix VS 2022 17.4 DR
P2579R0 Mitigation strategies for P2036 ”Changing scope for lambda trailing-return-type” nein
P2582R1 Wording for class template argument deduction from inherited constructors nein

Standardbibliotheksfeatures von C++

Eine detailliertere Auflistung der Features und Fehlerkorrekturen der Standardbibliothek nach Produktversionen ist auf der GitHub-Seite „Microsoft/STL > Changelog“ verfügbar.

Funktion Unterstützt
Standardbibliotheksfeatures von C++14 Unterstützt
N3462 SFINAE-Friendly result_of VS 2015.2
N3302 constexpr For <complex> VS 2015
N3469 constexpr For <chrono> VS 2015
N3470 constexpr For <array> VS 2015
N3471 constexpr For <initializer_list>, <tuple>, <utility> VS 2015
N3545 integral_constant::operator()() VS 2015
N3642 UDLs For <chrono>, <string> (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<T>() VS 2015
N3671 Dual-Range equal(), is_permutation(), mismatch() VS 2015
N3778 Sized Deallocation VS 2015
N3779 UDLs For <complex> (3.14i, etc.) VS 2015
N3789 constexpr For <functional> 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 <type_traits> (decay_t, etc.) VS 2013
N3656 make_unique() VS 2013
Standardbibliotheksfeatures von C++17 Unterstützt
N3911 void_t VS 2015 14
N4089 Safe Conversions In unique_ptr<T[]> VS 2015 14
N4169 invoke() VS 2015 14
N4190 Removing auto_ptr, random_shuffle(), And Old <functional> 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: <algorithm> sample() VS 2017 15.0
N4562 Library Fundamentals: <any> VS 2017 15.0
N4562 Library Fundamentals: <memory_resource>
P0337R0 Deleting polymorphic_allocator Assignment
VS 2017 15.6
N4562 Library Fundamentals: <optional> VS 2017 15.0
N4562 Library Fundamentals: <string_view> VS 2017 15.0
N4562 Library Fundamentals: <tuple> 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 <numeric> Parallel Algorithms
VS 2017 15.7 G
P0025R1 clamp() VS 2015.3
P0030R1 hypot(x, y, z) VS 2017 15.7
P0031R0 constexpr For <array> (Again) And <iterator> 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 <variant> VS 2017 15.0
P0092R1 <chrono> 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 <filesystem>
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 <string_view> ("meow"sv, etc.) VS 2017 15.3 17
P0414R2 shared_ptr<T[]>, shared_ptr<T[N]>
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<T>/in_place_index_t<I> VS 2017 15.0
P0505R0 constexpr For <chrono> (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<T> 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 <codecvt> VS 2017 15.5 17
Features der C++17-Standardbibliothek (Fehlerberichte) Unterstützt
P0682R1 Repairing Elementary String Conversions VS 2015 15.7 17
P1164R1 Making create_directory() Intuitive VS 2019 16.0 14
Standardbibliotheksfeatures von C++20 Unterstützt
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<float>, atomic<double>, atomic<long double> 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 <version> 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 <numeric> 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 <bit> Rotating And Counting Functions VS 2019 16.5 20
P0556R3 <bit> ispow2(), ceil2(), floor2(), log2p1() VS 2019 16.5 20
P0595R2 is_constant_evaluated() VS 2019 16.5 20
P0631R8 <numbers> Math Constants VS 2019 16.5 20
P0655R1 visit<R>() 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 <bit> 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 <span>
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 <algorithm> 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<T*>::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 <numeric> algorithms VS 2019 16.6 20
P0415R1 constexpr For <complex> (Again) VS 2019 16.7 20
P0476R2 <bit> 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<shared_ptr<T>>, atomic<weak_ptr<T>> 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 <bit> 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 <stop_token> 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 <syncstream>
P0753R2 osyncstream Manipulators
VS 2019 16.10 20
P0355R7 <chrono> 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 <format> Text Formatting VS 2019 16.10 20abi
P0784R7 Library support for more constexpr containers VS 2019 16.10 20
P0896R4 <ranges> 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 <source_location> 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
Features der C++20-Standardbibliothek (Fehlerberichte) Unterstützt
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-Standardibliotheksfeatures Unterstützt
P0288R9 move_only_function​ VS 2022 17.2 23
P0323R12 <expected>​​ VS 2022 17.3 23
P0401R6 Providing Size Feedback In The Allocator Interface​ VS 2022 17.0 23
P0448R4 <spanstream>​ 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 <stacktrace>​ 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 <charconv>​ VS 2022 17.4 23
P2302R4 ranges::contains, ranges::contains_subrange​ VS 2022 17.4 23
P2321R2 std::zip​ Partiell in 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​ nein
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<T*> Should Be A Random-Access Iterator​​ VS 2022 17.4 23
P2549R1 unexpected<E>::error() VS 2022 17.3 23

Eine Gruppe von Dokumenten, die zusammen aufgelistet sind, gibt ein Standardfeature zusammen mit mindestens einer genehmigten Verbesserung oder Erweiterung an. Diese Funktionen werden zusammen implementiert.

Standardbibliotheksfeatures von C

Funktion Unterstützt
Standardbibliotheksfeatures von C99 Unterstützt
 Makros für alternative Schreibweisen <iso646.h> VS 2015
 Unterstützung von Breitzeichen <wchar.h> und <wctype.h> VS 2015
 Unterstützung komplexer Zahlen in <complex.h> Partiell in VS 2015 K
 Typgenerische mathematische Funktionen <tgmath.h> VS 2019 16.8 2104
 Zusätzliche Gleitkommamerkmale <float.h> VS 2015
 printf-Spezifizierer für hexadezimale Gleitkommazahlen %A, %a VS 2015
 Erweiterte Integertypen <inttypes.h>, <stdint.h> VS 2015
vscanf-Familie in <stdio.h> und <wchar.h> VS 2015
 Neue mathematische Funktionen in <math.h> VS 2015
 Behandlung von Fehlerbedingungen der mathematischen Bibliothek(math_errhandling) VS 2015
 Zugriff auf Gleitkommaumgebung <fenv.h> VS 2015
%lf-Konvertierungsspezifizierer für printf VS 2015
snprintf-Funktionsfamilie in <stdio.h> VS 2015
boolean-Typ in <stdbool.h> VS 2015
va_copy-Makro VS 2015
 Zusätzliche strftime-Konvertierungsspezifizierer Partiell in VS 2015 L
Standardbibliotheksfeatures von C11 Unterstützt
 Ausrichtungsspezifizierer <stdalign.h> VS 2019 16.8 C11, 2104
aligned_alloc Nein M
 Keine Rückgabespezifizierer <stdnoreturn.h> VS 2019 16.8 C11, 2104
 Threadunterstützung <threads.h> No
 Atomic-Unterstützung <stdatomic.h> No
char16_t, char32_t<uchar.h> VS 2019 16.8 C11
gets() wurde entfernt VS 2019 16.8 C11, N
gets_s() VS 2019 16.8 C11
 Schnittstellen für Bindungsprüfung (*_s-APIs) Partiell in VS 2015 C11, O
fopen"x"-Option VS 2019 16.8 C11
 Statische Assertionen VS 2019 16.8 C11, 2104
quick_exit VS 2019 16.8 C11
<complex.h>-Makros VS 2019 16.8 C11
 Gleitkommamerkmale <float.h> VS 2019 16.8 C11

Unterstützte Werte

Nein Noch nicht implementiert.
Partiell Die Implementierung ist unvollständig. Weitere Informationen finden Sie im Abschnitt Hinweise.
VS 2010 Unterstützt in Visual Studio 2010.
VS 2013 Unterstützt in Visual Studio 2013.
VS 2015 Unterstützt in Visual Studio 2015 (RTW).
VS 2015.2 und VS 2015.3 geben Funktionen an, die in Visual Studio 2015 Update 2 und Visual Studio 2015 Update 3 unterstützt werden.
VS 2017 15.0 Unterstützt in Visual Studio 2017, Version 15.0 (RTW)
VS 2017 15.3 Unterstützt in Visual Studio 2017, Version 15.3
VS 2017 15.5 Unterstützt in Visual Studio 2017, Version 15.5
VS 2017 15.7 Unterstützt in Visual Studio 2017, Version 15.7
VS 2019 16.0 Unterstützt in Visual Studio 2019, Version 16.0 (RTW)
VS 2019 16.1 Unterstützt in Visual Studio 2019, Version 16.1
VS 2019 16.2 Unterstützt in Visual Studio 2019, Version 16.2
VS 2019 16.3 Unterstützt in Visual Studio 2019, Version 16.3
VS 2019 16.4 Unterstützt in Visual Studio 2019, Version 16.4
VS 2019 16.5 Unterstützt in Visual Studio 2019, Version 16.5
VS 2019 16.6 Unterstützt in Visual Studio 2019, Version 16.6
VS 2019 16.7 Unterstützt in Visual Studio 2019, Version 16.7
VS 2019 16.8 Unterstützt in Visual Studio 2019, Version 16.8
VS 2019 16.9 Unterstützt in Visual Studio 2019, Version 16.9
VS 2019 16.10 Unterstützt in Visual Studio 2019, Version 16.10.
VS 2022 17.0 Unterstützt in Visual Studio 2022, Version 17.0
VS 2022 17.1 Unterstützt in Visual Studio 2022 Version 17.1
VS 2022 17.2 Unterstützt in Visual Studio 2022 Version 17.2
VS 2022 17.3 Unterstützt in Visual Studio 2022 Version 17.3
VS 2022 17.4 Unterstützt in Visual Studio 2022 Version 17.4
VS 2022 17.5 Unterstützt in Visual Studio 2022, Version 17.5.

Hinweise

A Im Modus /std:c++14 werden dynamische Ausnahmespezifikationen nicht implementiert, und throw() wird weiterhin als Synonym von __declspec(nothrow) behandelt. In C++17 wurden dynamische Ausnahmespezifikationen größtenteils durch P0003R5 entfernt, bis auf eine: throw() ist als veraltet markiert und muss sich wie ein Synonym von noexcept verhalten. Im Modus /std:c++17 entspricht MSVC nun dem Standard, da throw() das gleiche Verhalten wie noexcept aufweist (d. h. Erzwingung durch Beenden).

Die Compileroption /Zc:noexceptTypes fordert das alte Verhalten von __declspec(nothrow) an. Es ist wahrscheinlich, dass throw() in einer zukünftigen Version von C++ entfernt wird. Es wurden neue Compilerwarnungen für Probleme mit Ausnahmespezifikationen unter /std:c++17 und /permissive- hinzugefügt, um die Codemigration aufgrund dieser Änderungen in der Standard- und Microsoft-Implementierung zu erleichtern.

B Wird im Modus /permissive- in Visual Studio 2017, Version 15.7 unterstützt. Weitere Informationen finden Sie unter Two-phase name lookup support comes to MSVC.

C Ab Visual Studio 2019, Version 16.6 implementiert der Compiler den C99-Präprozessor vollständig über die /Zc:preprocessor-Option. (In den Visual Studio 2017-Versionen 15.8 bis 16.5 unterstützt der Compiler den standardmäßigen C99-Präprozessor über die Compileroption /experimental:preprocessor.) Diese Option ist standardmäßig aktiviert, wenn die Compileroption /std:c11 oder /std:c17 angegeben ist.

D Unterstützt unter /std:c++14 mit der unterdrückbaren Warnung C4984.

E Die Implementierung ist ausreichend, um die C++20-Standardbibliothek zu unterstützen. Für eine vollständige Implementierung ist eine binäre Breaking Change erforderlich.

F Diese Features werden entfernt, wenn die Compileroption /std:c++17 oder höher angegeben wird. Um diese Features wieder zu aktivieren (um die Umstellung auf neuere Sprachmodi zu vereinfachen), können diese Makros verwendet werden: _HAS_AUTO_PTR_ETC, _HAS_FUNCTION_ALLOCATOR_SUPPORT, _HAS_OLD_IOSTREAMS_MEMBERS und _HAS_UNEXPECTED.

G Die Bibliothek mit parallelen Algorithmen von C++17 ist vollständig. „Vollständig“ bedeutet nicht, dass jeder Algorithmus in jedem Fall parallelisiert wird. Die wichtigsten Algorithmen wurden parallelisiert. Ausführungsrichtliniensignaturen werden auch dann bereitgestellt, wenn die Implementierung Algorithmen nicht parallelisiert. Der zentrale interne Header der Implementierung, <yvals_core.h>, enthält die folgenden Hinweise zu parallelen Algorithmen: C++ lässt zu, dass eine Implementierung parallele Algorithmen als Aufrufe serieller Algorithmen implementiert. Diese Implementierung parallelisiert einige aber nicht alle gängigen Algorithmusaufrufe.

Die folgenden Algorithmen werden parallelisiert:

  • adjacent_difference, adjacent_find, , all_of, countcount_ifinclusive_scanfor_eachfind_first_offindexclusive_scanequalfind_endfind_if_notany_offor_each_nfind_if, , transform_inclusive_scantransform_exclusive_scanis_heapis_heap_untilis_partitionedis_sortedis_sorted_untilmismatchnone_ofpartitionreduceremoveremove_ifreplacereplace_ifsearchsearch_nset_differenceset_intersectionsortstable_sorttransformtransform_reduce

Die folgenden Algorithmen sind derzeit nicht parallelisiert:

  • Diese Algorithmen zeigen keine nennenswerte Verbesserung der Leistung durch Parallelität auf der Zielhardware. Alle Algorithmen, die lediglich Elemente ohne Verzweigungen kopieren oder permutieren, sind in der Regel auf die Speicherbandbreite beschränkt:
    • copy, copy_n, , fill, fill_n, reversemove, reverse_copy, rotate, , rotate_copy, shift_left, , shift_rightswap_ranges
  • Für diese Algorithmen, die wahrscheinlich in der obigen Kategorie sind, gibt es Verwirrung über die Anforderungen an den Benutzerparallelismus:
    • generate, generate_n
  • Effektive Parallelität dieser Algorithmen kann nicht zu beachten sein:
    • partial_sort, partial_sort_copy
  • Diese Algorithmen wurden noch nicht ausgewertet. Die Bibliothek kann Parallelität in einer zukünftigen Version implementieren:
    • copy_if, includes, , inplace_merge, lexicographical_compare, mergemin_elementmax_element, minmax_element, nth_element, , stable_partitionuniquepartition_copyremove_copyremove_copy_ifreplace_copyreplace_copy_ifset_symmetric_differenceset_unionunique_copy

H Dies ist eine völlig neue Implementierung, die nicht mit der vorherigen std::experimental-Version kompatibel ist. Sie ist aufgrund von Symlink-Unterstützung, Fehlerbehebungen und Änderungen des erforderlichen Standardverhaltens erforderlich. Derzeit stellt <filesystem> sowohl das neue std::filesystem als auch das frühere std::experimental::filesystem zur Verfügung. Der <experimental/filesystem>-Header stellt lediglich die alte experimentelle Implementierung zur Verfügung. Gehen Sie von der Entfernung der experimentellen Implementierung im nächsten ABI-Breaking Release der Bibliotheken aus.

I Unterstützt durch eine intrinsische Compilerfunktion.

Jstd::byte wird durch /std:c++17 oder höher aktiviert. Da jedoch in einigen Fällen Konflikte mit den Windows SDK-Headern auftreten können, ist ein differenziertes Makro für die Abwahl vorhanden. Definieren Sie _HAS_STD_BYTE als 0, um dies zu deaktivieren.

K MSVC unterstützt nicht das Schlüsselwort _Complex oder native komplexe Typen. Die universelle CRT <complex.h> verwendet implementierungsspezifische Makros, um denselben Effekt zu erzielen. Weitere Informationen finden Sie im Artikel zur Unterstützung komplexer mathematischer Berechnungen in C.

L Die universelle CRT implementiert nicht die alternativen Konvertierungsmodifizierer strftimeE und O. Diese Modifizierer werden ignoriert (%Oe verhält sich beispielsweise wie %e). Die Modifizierer werden von den zugrunde liegenden Gebietsschema-APIs nicht unterstützt.

M Die universelle CRT implementiert C11 aligned_alloc nicht, stellt aber _aligned_malloc und _aligned_free zur Verfügung. Da das Windows-Betriebssystem keine ausgerichteten Zuordnungen unterstützt, wird diese Funktion wahrscheinlich nicht implementiert.

N Die Deklaration wird entfernt, aber der Export für die Funktion bleibt aus Gründen der Abwärtskompatibilität erhalten.

O Bestimmte Funktionen zur Begrenzungsprüfung sind nicht implementiert, weisen andere Signaturen auf oder sind nicht Teil des C11- oder C17-Standards. Diese Funktionen sind nicht implementiert: abort_handler_s, ignore_handler_s, memset_s, set_constraint_handler_s, snprintf_s, snwprintf_s, strerrorlen_s, vsnwprintf_s. Diese Funktionen weisen andere Signaturen auf: gmtime_s, localtime_s, qsort_s, strtok_s, vsnprintf_s, wcstok_s. Diese Funktionen sind nicht im Standard enthalten: clearerr_s, fread_s.

P Die Unterstützung wurde in Visual Studio 2019 Version 16.10 hinzugefügt. Die Unterstützung für Clang wurde in Visual Studio 2022 Version 17.0 hinzugefügt.

Q Dadurch werden auch declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers und get_pointer_safety entfernt. Diese Funktionen waren zuvor ohne Wirkung.

R Dies ist ein häufiger Breaking Change der Quelle. Allerdings wird Code mit vorher nicht definiertem Verhalten zur Runtime jetzt mit Compilerfehlern abgelehnt.

S-Eingabebereichsadapter und counted_iterator werden in VS 2022 17.0 implementiert. Ein zukünftiges Update auf Visual Studio 2019 Version 16.11 ist geplant, um diese Änderungen zu integrieren.

T<stdatomic.h> wird derzeit bei der C++-Kompilierung (/std:c++latest) unterstützt. Bei der C-Kompilierung (/std:c11 und /std:c17) wird dies noch nicht unterstützt.

14 Diese C++17- und C++20-Features sind immer aktiviert, auch wenn /std:c++14 (Standard) angegeben ist. Grund dafür ist entweder, dass das Feature vor der Einführung der /std -Optionen implementiert wurde oder dass die bedingte Implementierung unerwünscht komplex war.

17 Diese Features werden durch die Compileroption /std:c++17 oder höher aktiviert.

20 In Versionen bis Visual Studio 2019, Version 16.10 werden diese Features durch die Compileroption /std:c++latest aktiviert. In Visual Studio 2019 Version 16.11 wurde die Compileroption /std:c++20 hinzugefügt, um diese Features zu aktivieren.

20abi Aufgrund der laufenden Nacharbeiten am C++20-Standard <format> sind die Formatierungsteile von <chrono> (die auf <format> beruhen) und die Bereichsfactorys sowie -adapter aus <ranges> (alles, was für das view-Konzept benötigt wird) nur unter /std:c++latest verfügbar. Gehen Sie davon aus, dass diese Features unter /std:c++20 nach der Vereinbarung mit WG21 vorliegen, sodass keine weiteren ABI-Breaking Changes erforderlich sind. Die verbleibenden Teile von <chrono> und die Algorithmen für die Bereiche werden ab Visual Studio 2019 Version 16.11 unter der Compileroption /std:c++20 aktiviert.

23 In Visual Studio 2022, Version 17.0 und höher werden diese Features durch die Compileroption /std:c++latest aktiviert.

C11 Compilerunterstützung für C11 und C17 erfordert Visual Studio 2019, Version 16.8 oder höher. Sofern nicht anders angegeben, erfordert die C11- und C17-Bibliotheksunterstützung das Windows SDK-Build 10.0.20211.0 oder höher. Weitere Informationen zum Installieren der Unterstützung für C11 und C17 finden Sie unter Installieren der Unterstützung für C11 und C17 in Visual Studio.

DR Diese Features sind in allen /std-Compileroptionsmodi von C++ aktiviert. Der Ausschuss für den C++-Standard hat diese Änderung als einen rückwirkenden Fehlerbericht zu C++11 und allen späteren Versionen übernommen.

2104 Die C11-Bibliotheksunterstützung für dieses Feature erfordert den Windows SDK-Build 10.0.20348.0 (Version 2104) oder höher.

Siehe auch

C++-Programmiersprachenreferenz
C++-Standardbibliothek
Verbesserungen der C++-Konformität in Visual Studio 2015
Neuerungen bei Visual C++ in Visual Studio
Änderungsverlauf von Visual C++ von 2003 bis 2015
Visual C++: Neuerungen von 2003 bis 2015
C++-Teamblog