Standardefterlevnad för Microsoft C/C++-kompilatorn i Visual Studio (MSVC) är ett pågående arbete. Här är en sammanfattning av ISO-standardens överensstämmelse för C- och C++-språk och bibliotek i olika Visual Studio-versioner. Varje C++-kompilator och standardbibliotekets funktionsnamn har en länk till ISO Standard C++-förslagsdokumentet som beskriver funktionen, när en är tillgänglig vid publiceringstillfället. Kolumnen Stöds visar den Visual Studio-version där stödet för funktionen först visades.
Mer information om efterlevnadsförbättringar finns i Förbättringar av C++-överensstämmelse i Visual Studio. En lista över andra ändringar finns i Nyheter för Microsoft C++ i Visual Studio. Mer information om ändringar i tidigare versioner finns i Visual C++-ändringshistorik och Visual C++ Nyheter 2003 till och med 2015. Aktuella nyheter från C++-teamet finns i C++-teamets blogg.
C++-kompilatorfunktioner
| Feature |
Supported |
|
C++03/11 Grundläggande språkfunktioner |
Supported |
| Allt annat |
VS 2015 A |
| Tvåfasnamnsökning |
VS 2017 15,7 B |
N2634 Expression SFINAE |
VS 2017 15,7 |
N1653 C99 preprocessor |
VS 2019 16.6 C |
|
C++03/11 Grundläggande språkfunktioner (defekta rapporter) |
Supported |
|
C++14 Grundläggande språkfunktioner |
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 Uppdatering 2 |
N3652 Extended constexpr |
VS 2017 15.0 |
N3653 Default member initializers for aggregates |
VS 2017 15.0 |
|
C++17 Grundläggande språkfunktioner |
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 Grundläggande språkfunktioner (defekta rapporter) |
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 |
Partiell i VS 2019 16,7 E, full i 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 Grundläggande språkfunktioner |
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 <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. För att ge bättre bakåtkompatibilitet __VA_OPT__ aktiveras under /Zc:preprocessor i alla språkversioner. |
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 |
VS 2022 v17.14 |
P1236R1 Signed integers are two's complement |
VS 2022 v17.14 |
|
C++23 Grundläggande språkfunktioner |
Supported |
P0330R8 Literal Suffix for (signed) size_t |
VS 2022 17,13 23 |
P0847R7 Deducing this |
VS 2022 17,13 23 |
P0849R8 auto(x): decay-copy in the language |
MSVC Build Tools version 14.50 24 |
P1102R2 Down with ()! |
VS 2022 17.14 23 |
P1169R4 static operator() |
VS 2022 17.14 23 |
P1401R5 Narrowing contextual conversions to bool |
VS 2022 17.14 23 |
P1467R9 Extended floating-point types and standard names |
Ingen U |
P1774R8 Portable assumptions |
no |
P1787R6 Declarations and where to find them |
Ingen ändring krävs |
P1847R4 Make declaration order layout mandated |
VS 2022 17,0 23 |
P1938R3 if consteval |
VS 2022 17.14 23 |
P1949R7 C++ Identifier Syntax using Unicode Standard Annex 31 |
MSVC Build Tools version 14.50 24 |
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 |
MSVC Build Tools version 14.50 24 |
P2071R2 Named universal character escapes |
no |
P2128R6 Multidimensional subscript operator |
VS 2022 17.12 23 |
P2156R1 Allow Duplicate Attributes |
MSVC Build Tools version 14.50 24 |
P2173R1 Attributes on Lambda-Expressions |
VS 2022 17.14 23 |
P2186R2 Remove Garbage Collection Support |
VS 2022 17,0 23 |
P2201R1 Mixed string literal concatenation |
VS 2022 17.14 |
P2223R2 Trimming whitespaces before line splicing |
MSVC Build Tools version 14.50 24 |
P2242R3 Non-literal variables (and labels and gotos) in constexpr functions |
VS 2022 17.14 23 |
P2246R1 Character encoding of diagnostic text |
VS 2022 17,0 23 |
P2266R3 Simpler implicit move |
MSVC Build Tools version 14.50 24 |
P2280R4 Using unknown pointers and references in constant expressions |
MSVC Build Tools version 14.50 24 |
P2290R3 Delimited escape sequences |
MSVC Build Tools version 14.50 24 |
P2295R6 Support for UTF-8 as a portable source file encoding |
V |
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 |
VS 2022 v17.14 |
P2334R1 preprocessing directives elifdef and elifndef |
VS 2022 17.10 23 |
P2360R0 Extend init-statement to allow alias-declaration |
MSVC Build Tools version 14.50 24 |
P2362R3 Remove non-encodable wide character literals and multicharacter wide character literals |
no |
P2437R1 Support for #warning |
MSVC Build Tools version 14.50 24 |
P2448R2 Relaxing some constexpr restrictions |
no |
P2460R2 Relax requirements on wchar_t to match existing practices |
VS 2022 v17.14 |
P2468R2 The Equality Operator You Are Looking For |
VS 2022 17,6 23 |
P2493R0 Missing feature test macros for C++20 core papers |
MSVC Build Tools version 14.50 24 |
P2513R4 char8_t Compatibility and Portability Fix |
VS 2022 17.4 DR |
P2579R0 Mitigation strategies for P2036 "Changing scope for lambda trailing-return-type" |
MSVC Build Tools version 14.50 24 |
P2582R1 Wording for class template argument deduction from inherited constructors |
no |
C++ Standard-biblioteksfunktioner
En mer detaljerad lista över standardbiblioteksfunktioner och felkorrigeringar efter produktversion finns på Sidan För ändringslogg för Microsoft STL-wikin på GitHub .
Den senaste informationen om pågående efterlevnadsarbete finns i:
| Feature |
Supported |
|
C++14 Standard-biblioteksfunktioner |
Supported |
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() |
Visual Studio 2015 (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 |
|
C++17 Standard-biblioteksfunktioner |
Supported |
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 |
|
C++17 Standard-biblioteksfunktioner (defekta rapporter) |
Supported |
P0682R1 Repairing Elementary String Conversions |
VS 2017 15,7 17 |
P1164R1 Making create_directory() Intuitive |
VS 2019 16,0 14 |
|
C++20 Standard-biblioteksfunktioner |
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<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 |
VS 2022 v17.14 |
|
C++20 Standard-biblioteksfunktioner (defekta rapporter) |
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 Standard-biblioteksfunktioner |
Supported |
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 |
P2280R4 Using unknown pointers and references in constant expressions |
MSVC Build Tools version 14.5 24 |
P2290R3 Delimited escape sequences |
MSVC Build Tools version 14.5 24 |
P2291R3 constexpr Integral <charconv> |
VS 2022 17,4 23 |
P2302R4 ranges::contains, ranges::contains_subrange |
VS 2022 17,4 23 |
P2321R2 std::zip |
delvis i VS 2022 17,5 23 |
P2322R6 ranges::fold_left, ranges::fold_right, etc. |
VS 2022 17,5 23 |
P2360R0 Extend init-statement to allow alias-declaration |
MSVC Build Tools version 14.5 24 |
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 |
P2437R1 Support for #warning |
MSVC Build Tools version 14.50 24 |
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<T*> Should Be A Random-Access Iterator |
VS 2022 17,4 23 |
P2549R1 unexpected<E>::error() |
VS 2022 17,3 23 |
En grupp papper som listas tillsammans anger en Standard-funktion tillsammans med en eller flera godkända förbättringar eller expansioner. Dessa funktioner implementeras tillsammans.
C Standard-biblioteksfunktioner
| Feature |
Supported |
|
C99 Standard-biblioteksfunktioner |
Supported |
Alternativa stavningsmakron <iso646.h> |
VS 2015 |
Stöd för breda tecken <wchar.h> och <wctype.h> |
VS 2015 |
Komplext stöd i <complex.h> |
Partiell i VS 2015 K |
Skriv allmänna matematiska funktioner <tgmath.h> |
VS 2019 16,8 2104 |
Ytterligare flyttalsegenskaper <float.h> |
VS 2015 |
Hexadecimala float printf-specifikatorer %A, %a |
VS 2015 |
Utökade heltalstyper <inttypes.h>, <stdint.h> |
Visual Studio 2015 |
vscanf familj i <stdio.h> och <wchar.h> |
VS 2015 |
Nya matematiska funktioner i <math.h> |
VS 2015 |
Behandling av felvillkor för matematiskt bibliotek (math_errhandling) |
VS 2015 |
Åtkomst till flyttalsmiljö <fenv.h> |
VS 2015 |
%lf konverteringsspecificerare för printf |
Visual Studio 2015 |
snprintf familj av funktioner i <stdio.h> |
VS 2015 |
boolean skriv in <stdbool.h> |
VS 2015 |
va_copy makro |
VS 2015 |
Ytterligare strftime konverteringsspecificerare |
Partiell i VS 2015 L |
|
C11 Standard-biblioteksfunktioner |
Supported |
Justeringsspecificerare <stdalign.h> |
VS 2019 16.8 C11, 2104 |
aligned_alloc |
Ingen M |
Inga returspecificerare <stdnoreturn.h> |
VS 2019 16.8 C11, 2104 |
Stöd för trådning <threads.h> |
yes |
Atomstöd <stdatomic.h> |
experimental |
char16_t, char32_t<uchar.h> |
VS 2019 16.8 C11 |
gets() avlägsnad |
VS 2019 16.8 C11, N |
gets_s() |
VS 2019 16.8 C11 |
Gränssnitt för gränskontroll (*_s API:er) |
Delvis i VS 2015 C11, O |
fopen
"x" alternativ |
VS 2019 16.8 C11 |
| Statiska intyg |
VS 2019 16.8 C11, 2104 |
quick_exit |
VS 2019 16.8 C11 |
<complex.h> Makron |
VS 2019 16.8 C11 |
flyttalsegenskaper <float.h> |
VS 2019 16.8 C11 |
C11-trådar <threads.h> |
VS 2022 17.8 C11 |
Värden som stöds
Nej Ännu inte implementerad.
Partiell Implementeringen är ofullständig. Mer information finns i avsnittet Anteckningar.
VS 2010 Stöds i Visual Studio 2010.
VS 2013 Stöds i Visual Studio 2013.
VS 2015 Stöds i Visual Studio 2015 (RTW).
VS 2015.2 och VS 2015.3 anger funktioner som stöds i Visual Studio 2015 Update 2 respektive Visual Studio 2015 Update 3.
VS 2017 15.0 Stöds i Visual Studio 2017 version 15.0 (RTW).
VS 2017 15.3 Stöds i Visual Studio 2017 version 15.3.
VS 2017 15.5 Stöds i Visual Studio 2017 version 15.5.
VS 2017 15,7 Stöds i Visual Studio 2017 version 15.7.
VS 2019 16.0 Stöds i Visual Studio 2019 version 16.0 (RTW).
VS 2019 16.1 Stöds i Visual Studio 2019 version 16.1.
VS 2019 16.2 Stöds i Visual Studio 2019 version 16.2.
VS 2019 16.3 Stöds i Visual Studio 2019 version 16.3.
VS 2019 16.4 Stöds i Visual Studio 2019 version 16.4.
VS 2019 16,5 Stöds i Visual Studio 2019 version 16.5.
VS 2019 16.6 Stöds i Visual Studio 2019 version 16.6.
VS 2019 16,7 Stöds i Visual Studio 2019 version 16.7.
VS 2019 16,8 Stöds i Visual Studio 2019 version 16.8.
VS 2019 16,9 Stöds i Visual Studio 2019 version 16.9.
VS 2019 16.10 Stöds i Visual Studio 2019 version 16.10.
VS 2022 17.0 Stöds i Visual Studio 2022 version 17.0.
VS 2022 17.1 Stöds i Visual Studio 2022 version 17.1.
VS 2022 17.2 Stöds i Visual Studio 2022 version 17.2.
VS 2022 17.3 Stöds i Visual Studio 2022 version 17.3.
VS 2022 17.4 Stöds i Visual Studio 2022 version 17.4.
VS 2022 17,5 Stöds i Visual Studio 2022 version 17.5.
MSVC Build Tools version 14.50 Stöds i Visual Studio 2026 18.0 (MSVC-kompilatorversion 19.50) och senare.
Notes
I/std:c++14 läge lämnar kompilatorn dynamiska undantagsspecifikationer ogenomförda och behandlar throw() som en synonym för __declspec(nothrow). I C++17 tog P0003R5 bort de flesta dynamiska undantagsspecifikationerna, förutom en rest: standarden har avskaffats throw() och kräver att den fungerar som ett synonym för noexcept. I läget /std:c++17 följer MSVC nu standarden genom att ge throw() samma beteende som noexcept, det vill säga avslutning genom tvång.
Kompilatoralternativet /Zc:noexceptTypes begär det gamla beteendet för __declspec(nothrow). Det är troligt att det kommer att throw() tas bort i en framtida version av C++. För att hjälpa till med att migrera kod som svar på dessa ändringar i Standard- och Microsoft-implementeringen läggs nya kompilatorvarningar för undantagsspecifikationsproblem till under /std:c++17 och /permissive-.
B Stöds i /permissive- läge i Visual Studio 2017 version 15.7. Mer information finns i Two-phase name lookup support comes to MSVC.
C I Visual Studio 2019 version 16.6 och senare versioner implementerar kompilatorn helt C99-standardpreprocessorn /Zc:preprocessor via alternativet. (I Visual Studio 2017 version 15.8 till 16.5 stöder kompilatorn C99-standardförprocessorn via kompilatoralternativet /experimental:preprocessor .) Det här alternativet är aktiverat som standard när kompilatoralternativet /std:c11 eller /std:c17 anges.
D Stöds med /std:c++14 med en varning som kan undertryckas, C4984.
E Implementeringen är tillräcklig för att stödja C++20-standardbiblioteket. En fullständig implementering kräver en binär icke-bakåtkompatibel ändring.
F Funktioner som tas bort när kompilatoralternativet /std:c++17 eller senare anges. Om du vill återaktivera dessa funktioner (för att underlätta övergången till nyare språklägen) använder du följande makron: _HAS_AUTO_PTR_ETC, _HAS_FUNCTION_ALLOCATOR_SUPPORT, _HAS_OLD_IOSTREAMS_MEMBERSoch _HAS_UNEXPECTED.
G C++17-biblioteket för parallella algoritmer är klart. Complete betyder inte att varje algoritm parallelliseras i varje enskilt fall. De viktigaste algoritmerna parallelliseras. Signaturer för körningsprinciper tillhandahålls även om implementeringen inte parallelliserar algoritmer. Det centrala interna huvudet, <yvals_core.h>, innehåller följande "Parallella algoritmanteckningar": C++ tillåter en implementering för att implementera parallella algoritmer som anrop till seriealgoritmerna. Den här implementeringen parallelliserar flera vanliga algoritmanrop, men inte alla.
Följande algoritmer parallelliseras:
-
adjacent_difference, adjacent_find, all_of, any_of, count, count_if, equal, exclusive_scan, find, find_end, find_first_of, find_if, find_if_not, , for_each, for_each_n, inclusive_scan, is_heap, is_heap_untilis_partitionedis_sortedis_sorted_untilmismatch, none_of, partitionreduceremoveremove_ifreplacereplace_ifsearch, search_n, set_difference, set_intersection, , sort, , stable_sort, transform, , , transform_exclusive_scantransform_inclusive_scantransform_reduce
Dessa algoritmer är för närvarande inte parallelliserade:
- Dessa algoritmer visar ingen märkbar prestandaförbättring för parallellitet på målmaskinvaran. Alla algoritmer som bara kopierar eller permuterar element utan grenar är vanligtvis minnesbandbredden begränsad:
-
copy, copy_n, fill, fill_n, move, reverse, reverse_copy, rotate, , rotate_copy, shift_left, , , shift_rightswap_ranges
- Det finns förvirring över kraven på användarparallellitet för dessa algoritmer, som sannolikt finns i kategorin ovan i alla fall:
- Effektiv parallellitet mellan dessa algoritmer kan vara ogenomförbar:
-
partial_sort, partial_sort_copy
- Dessa algoritmer utvärderas inte ännu. Biblioteket kan implementera parallellitet i en framtida version:
-
copy_if, includes, inplace_merge, lexicographical_compare, max_element, merge, min_element, minmax_element, nth_element, partition_copy, remove_copy, remove_copy_if, replace_copy, replace_copy_if, set_symmetric_difference, set_union, stable_partition, unique, unique_copy
H Detta är en helt ny implementering, som inte är kompatibel med den tidigare std::experimental versionen, och har blivit nödvändig på grund av stöd för symlänkar, felkorrigeringar och förändringar i beteende så som standarden kräver.
<filesystem> tillhandahåller för närvarande både den nya std::filesystem och den tidigare std::experimental::filesystem. Rubriken <experimental/filesystem> innehåller bara den gamla experimentella implementeringen. Förvänta dig att den experimentella implementeringen tas bort i nästa version av biblioteken som bryter ABI.
Jag stöds av en inbyggd kompilator.
Jstd::byte aktiveras av /std:c++17 eller senare, men eftersom det kan vara i konflikt med Windows SDK-huvudena i vissa fall har det ett detaljerat avaktiveringsmakro. Om du vill inaktivera det definierar du _HAS_STD_BYTE som 0.
K MSVC stöder inte nyckelord eller _Complex inbyggda komplexa typer. Universal CRT <complex.h> använder implementeringsspecifika makron för att uppnå samma effekt. Mer information finns i C-komplext matematiskt stöd.
L Universal CRT implementerar inte strftimeE och O alternativa konverteringsmodifierare. Dessa modifierare ignoreras (till exempel %Oe fungerar samma som %e). De underliggande språk-API:erna stöder inte modifierarna.
M Universal CRT implementerar inte C11 aligned_alloc, men tillhandahåller _aligned_malloc och _aligned_free. Eftersom Windows-operativsystemet inte stöder justerade allokeringar är det osannolikt att den här funktionen kommer att implementeras.
N Deklarationen tas bort, men exporten för funktionen förblir för bakåtkompatibilitet.
O Vissa funktioner för gränskontroll är ogenomförda, har olika signaturer eller ingår inte i C11- eller C17-standarden. Dessa funktioner är ogenomförda: abort_handler_s, ignore_handler_s, memset_s, set_constraint_handler_s, snprintf_s, snwprintf_s, , strerrorlen_s, vsnwprintf_s. Dessa funktioner har olika signaturer: gmtime_s, localtime_s, qsort_s, strtok_s, vsnprintf_s, wcstok_s. Dessa funktioner visas inte i standarden: clearerr_s, fread_s.
P Support lades till i Visual Studio 2019 version 16.10. Stöd för Clang lades till i Visual Studio 2022 version 17.0.
Q Detta tar bort declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety. Tidigare hade dessa funktioner ingen effekt.
R Det här är en vanlig förändring som bryter mot källkoden. Men kod som tidigare hade odefinierat beteende vid körning avvisas nu med kompilatorfel.
S Adaptorer för indataintervall och counted_iterator implementeras i VS 2022 17.0. En framtida uppdatering av Visual Studio 2019 version 16.11 planeras att innehålla dessa ändringar.
T<stdatomic.h> stöds för närvarande när det kompileras som C++ (/std:c++latest). Det stöds inte ännu när det kompileras som C (/std:c11 och /std:c17)
U Utökade flyttalstyper är en valfri C++23-funktion. Den här funktionen implementeras inte förrän C++23-standardiseringen har slutförts.
V Använd kompileringsalternativen /source-charset:utf-8 och /we4828 för att behandla källfiler som UTF-8-kodade.
14 Dessa C++17- och C++20-funktioner är alltid aktiverade, även när /std:c++14 (standard) har angetts. Orsaken är antingen att funktionen implementerades innan alternativen /std infördes, eller att villkorsstyrd implementering var onödigt komplex.
17 Dessa funktioner aktiveras av kompilatoralternativet /std:c++17 eller senare.
20 I versioner via Visual Studio 2019 version 16.10 aktiveras dessa funktioner av kompilatoralternativet /std:c++latest . Visual Studio 2019 version 16.11 lade till kompilatoralternativet /std:c++20 för att aktivera dessa funktioner.
20abi På grund av pågående arbete efter lanseringen på C++20-standarden, <format> är formateringsdelarna i <chrono> (som förlitar sig på <format>) och range factories och range adaptorer från <ranges> (allt som behöver konceptet view) endast tillgängliga under /std:c++latest. Förvänta dig dessa funktioner under /std:c++20 när överenskommelse har nåtts med WG21 om att inga ytterligare ABI-förändrande ändringar behövs. Återstående delar av <chrono> och de algoritmer som gäller för intervall aktiveras under kompileringsalternativet /std:c++20 i Visual Studio 2019 version 16.11 och senare versioner.
23 I Visual Studio 2022 version 17.0 och senare aktiveras dessa funktioner med kompileringsalternativet /std:c++latest .
24 I MSVC Build Tools version 14.50 och senare (levereras först med Visual Studio 2026 version 18.0) aktiveras dessa funktioner med kompilatoralternativet /std:c++latest .
C11 Kompilatorstöd för C11 och C17 kräver Visual Studio 2019 version 16.8 eller senare. Förutom vad som anges kräver stöd för C11- och C17-bibliotek Windows SDK version 10.0.20211.0 eller senare. Mer information om hur du installerar stöd för C11 och C17 finns i Installera C11- och C17-stöd i Visual Studio.
DR De här funktionerna är aktiverade i alla C++ /std -kompilatoralternativlägen. C++ Standard-kommittén antog denna ändring som en retroaktiv defektrapport till C++11 och alla senare versioner.
2104 C11-biblioteksstöd för den här funktionen kräver Windows SDK build 10.0.20348.0 (version 2104) eller senare.
Se även
C++-språkreferens
C++-standardbibliotek
förbättringar av C++-överensstämmelse i Visual Studio
Nyheter för Microsoft C++ i Visual Studio
Visual C++ ändringshistorik 2003 till 2015
Visual C++ Nyheter 2003 till och med 2015
C++-teamets blogg