Standards conformance for the Microsoft C/C++ compiler in Visual Studio (MSVC) is a work in progress. Here's a summary of ISO Standard C and C++ language and library conformance by Visual Studio version. Each C++ compiler and standard library feature name has a link to the ISO Standard C++ proposal paper that describes the feature, when one is available at publication time. The Supported column lists the Visual Studio version in which support for the feature first appeared.
For details on conformance improvements, see C++ conformance improvements in Visual Studio. For a list of other changes, see What's New for Visual C++ in Visual Studio. For conformance changes in earlier versions, see Visual C++ change history and Visual C++ What's New 2003 through 2015. For current news from the C++ team, visit the C++ team blog.
C++ compiler features C++ Standard library featuresA more detailed listing of Standard Library features and bug fixes by product version is available on the GitHub Microsoft STL wiki Changelog page.
Feature Supported C++14 Standard library features 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()
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 library features 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 library features (Defect reports) Supported âP0682R1 Repairing Elementary String Conversions
VS 2015 15.7 17 âP1164R1 Making create_directory() Intuitive
VS 2019 16.0 14 C++20 Standard library features 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
N/A C++20 Standard library features (Defect reports) 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 library features 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 âP2291R3 constexpr Integral <charconv>â
VS 2022 17.4 23 âP2302R4 ranges::contains, ranges::contains_subrangeâ
VS 2022 17.4 23 âP2321R2 std::zipâ
partial 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â
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
A group of papers listed together indicates a Standard feature along with one or more approved improvements or expansions. These features are implemented together.
C Standard library features Feature Supported C99 Standard library features Supported âAlternative spellings macros<iso646.h>
VS 2015 âWide character support <wchar.h>
and <wctype.h>
VS 2015 âComplex support in <complex.h>
Partial in VS 2015 K âType generic math functions <tgmath.h>
VS 2019 16.8 2104 âAdditional floating point characteristics <float.h>
VS 2015 âHexadecimal float printf specifiers %A
, %a
VS 2015 âExtended integers types <inttypes.h>
, <stdint.h>
VS 2015 âvscanf
family in <stdio.h>
and <wchar.h>
VS 2015 âNew math functions in <math.h>
VS 2015 âTreatment of math library error conditions (math_errhandling
) VS 2015 âFloating point environment access <fenv.h>
VS 2015 â%lf
conversion specifier for printf
VS 2015 âsnprintf
family of functions in <stdio.h>
VS 2015 âboolean
type in <stdbool.h>
VS 2015 âva_copy
macro VS 2015 âAdditional strftime
conversion specifiers Partial in VS 2015 L C11 Standard library features Supported âAlignment specifiers <stdalign.h>
VS 2019 16.8 C11, 2104 âaligned_alloc
No M âNo return specifiers <stdnoreturn.h>
VS 2019 16.8 C11, 2104 âThreading support <threads.h>
yes âAtomic support <stdatomic.h>
experimental âchar16_t
, char32_t
<uchar.h>
VS 2019 16.8 C11 âgets()
removed VS 2019 16.8 C11, N âgets_s()
VS 2019 16.8 C11 âBounds-checking interfaces (*_s
APIs) Partial in VS 2015 C11, O âfopen
"x"
option VS 2019 16.8 C11 âStatic assertions VS 2019 16.8 C11, 2104 âquick_exit
VS 2019 16.8 C11 â<complex.h>
macros VS 2019 16.8 C11 âfloating point characteristics <float.h>
VS 2019 16.8 C11 âC11 threads <threads.h>
VS 2022 17.8 C11 Supported values
No Not yet implemented.
Partial The implementation is incomplete. For more information, see the Notes section.
VS 2010 Supported in Visual Studio 2010.
VS 2013 Supported in Visual Studio 2013.
VS 2015 Supported in Visual Studio 2015 (RTW).
VS 2015.2 and VS 2015.3 indicate features that are supported in Visual Studio 2015 Update 2 and Visual Studio 2015 Update 3, respectively.
VS 2017 15.0 Supported in Visual Studio 2017 version 15.0 (RTW).
VS 2017 15.3 Supported in Visual Studio 2017 version 15.3.
VS 2017 15.5 Supported in Visual Studio 2017 version 15.5.
VS 2017 15.7 Supported in Visual Studio 2017 version 15.7.
VS 2019 16.0 Supported in Visual Studio 2019 version 16.0 (RTW).
VS 2019 16.1 Supported in Visual Studio 2019 version 16.1.
VS 2019 16.2 Supported in Visual Studio 2019 version 16.2.
VS 2019 16.3 Supported in Visual Studio 2019 version 16.3.
VS 2019 16.4 Supported in Visual Studio 2019 version 16.4.
VS 2019 16.5 Supported in Visual Studio 2019 version 16.5.
VS 2019 16.6 Supported in Visual Studio 2019 version 16.6.
VS 2019 16.7 Supported in Visual Studio 2019 version 16.7.
VS 2019 16.8 Supported in Visual Studio 2019 version 16.8.
VS 2019 16.9 Supported in Visual Studio 2019 version 16.9.
VS 2019 16.10 Supported in Visual Studio 2019 version 16.10.
VS 2022 17.0 Supported in Visual Studio 2022 version 17.0.
VS 2022 17.1 Supported in Visual Studio 2022 version 17.1.
VS 2022 17.2 Supported in Visual Studio 2022 version 17.2.
VS 2022 17.3 Supported in Visual Studio 2022 version 17.3.
VS 2022 17.4 Supported in Visual Studio 2022 version 17.4.
VS 2022 17.5 Supported in Visual Studio 2022 version 17.5.
A In /std:c++14
mode, dynamic exception specifications remain unimplemented, and throw()
is still treated as a synonym for __declspec(nothrow)
. In C++17, dynamic exception specifications were mostly removed by P0003R5, except for one vestige: throw()
is deprecated and required to behave as a synonym for noexcept
. In /std:c++17
mode, MSVC now conforms to the Standard by giving throw()
the same behavior as noexcept
, that is, enforcement via termination.
The compiler option /Zc:noexceptTypes
requests the old behavior of __declspec(nothrow)
. It's likely that throw()
will be removed in a future version of C++. To help with migrating code in response to these changes in the Standard and the Microsoft implementation, new compiler warnings for exception specification issues are added under /std:c++17
and /permissive-
.
B Supported in /permissive-
mode in Visual Studio 2017 version 15.7. For more information, see Two-phase name lookup support comes to MSVC
.
C In Visual Studio 2019 version 16.6 and later versions, the compiler fully implements the standard C99 preprocessor via the /Zc:preprocessor
option. (In Visual Studio 2017 versions 15.8 through 16.5, the compiler supports the standard C99 preprocessor via the /experimental:preprocessor
compiler option.) This option is on by default when the compiler option /std:c11
or /std:c17
is specified.
D Supported under /std:c++14
with a suppressible warning, C4984
.
E The implementation is sufficient to support the C++20 Standard Library. A complete implementation requires a binary breaking change.
F Features removed when the /std:c++17
or later compiler option is specified. To re-enable these features (to ease the transition to newer language modes), use these macros: _HAS_AUTO_PTR_ETC
, _HAS_FUNCTION_ALLOCATOR_SUPPORT
, _HAS_OLD_IOSTREAMS_MEMBERS
, and _HAS_UNEXPECTED
.
G C++17's parallel algorithms library is complete. Complete doesn't mean that every algorithm is parallelized in every case. The most important algorithms have been parallelized. Execution policy signatures are provided even where the implementation doesn't parallelize algorithms. The central internal header, <yvals_core.h>
, contains the following "Parallel Algorithms Notes": C++ allows an implementation to implement parallel algorithms as calls to the serial algorithms. This implementation parallelizes several common algorithm calls, but not all.
The following algorithms are parallelized:
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_until
, is_partitioned
, is_sorted
, is_sorted_until
, mismatch
, none_of
, partition
, reduce
, remove
, remove_if
, replace
, replace_if
, search
, search_n
, set_difference
, set_intersection
, sort
, stable_sort
, transform
, transform_exclusive_scan
, transform_inclusive_scan
, transform_reduce
These algorithms aren't presently parallelized:
copy
, copy_n
, fill
, fill_n
, move
, reverse
, reverse_copy
, rotate
, rotate_copy
, shift_left
, shift_right
, swap_ranges
generate
, generate_n
partial_sort
, partial_sort_copy
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 This is a wholly new implementation, incompatible with the previous std::experimental
version, made necessary by symlink support, bug fixes, and changes in standard-required behavior. Currently, <filesystem>
provides both the new std::filesystem
and the previous std::experimental::filesystem
. The <experimental/filesystem>
header provides only the old experimental implementation. Expect removal of the experimental implementation in the next ABI-breaking release of the libraries.
I Supported by a compiler intrinsic.
J std::byte
is enabled by /std:c++17
or later, but because it can conflict with the Windows SDK headers in some cases, it has a fine-grained opt-out macro. To disable it, define _HAS_STD_BYTE
as 0
.
K MSVC doesn't support the _Complex
keyword or native complex types. The Universal CRT <complex.h>
uses implementation-specific macros to achieve the same effect. For more information, see C complex math support.
L The Universal CRT doesn't implement the strftime
E
and O
alternative conversion modifiers. These modifiers are ignored (for example, %Oe
behaves the same as %e
). The modifiers aren't supported by the underlying locale APIs.
M The Universal CRT doesn't implement C11 aligned_alloc
, but does provide _aligned_malloc
and _aligned_free
. Because the Windows operating system doesn't support aligned allocations, this function is unlikely to be implemented.
N The declaration is removed, but the export for the function remains for backward compatibility.
O Certain bounds-checking functions are unimplemented, or have different signatures, or aren't part of the C11 or C17 standard. These functions are unimplemented: abort_handler_s
, ignore_handler_s
, memset_s
, set_constraint_handler_s
, snprintf_s
, snwprintf_s
, strerrorlen_s
, vsnwprintf_s
. These functions have different signatures: gmtime_s
, localtime_s
, qsort_s
, strtok_s
, vsnprintf_s
, wcstok_s
. These functions don't appear in the standard: clearerr_s
, fread_s
.
P Support was added in Visual Studio 2019 version 16.10. Support for Clang was added in Visual Studio 2022 version 17.0.
Q This removes declare_reachable
, undeclare_reachable
, declare_no_pointers
, undeclare_no_pointers
, get_pointer_safety
. Previously, these functions had no effect.
R This is a common source-breaking change. However, code that previously had undefined behavior at runtime is now rejected with compiler errors.
S Input range adaptors and counted_iterator
are implemented in VS 2022 17.0. A future update to Visual Studio 2019 version 16.11 is planned to incorporate these changes.
T <stdatomic.h>
is currently supported when compiled as C++ (/std:c++latest
). It isn't yet supported when compiled as C (/std:c11
and /std:c17
)
14 These C++17 and C++20 features are always enabled, even when /std:c++14
(the default) is specified. The reason is either because the feature was implemented before the introduction of the /std
options, or because conditional implementation was undesirably complex.
17 These features are enabled by the /std:c++17
or later compiler option.
20 In versions through Visual Studio 2019 version 16.10, these features are enabled by the /std:c++latest
compiler option. Visual Studio 2019 version 16.11 added the /std:c++20
compiler option to enable these features.
20abi Because of ongoing post-release work on the C++20 standard, <format>
, the formatting parts of <chrono>
(which rely on <format>
), and the range factories and range adaptors from <ranges>
(everything that needs the view
concept) are only available under /std:c++latest
. Expect these features under /std:c++20
after agreement is reached with WG21 that no further ABI-breaking changes are necessary. The remaining parts of <chrono>
and the algorithms that apply to ranges are enabled under the /std:c++20
compiler option in Visual Studio 2019 version 16.11 and later versions.
23 In Visual Studio 2022 version 17.0 and up, these features are enabled by the /std:c++latest
compiler option.
C11 Compiler support for C11 and C17 requires Visual Studio 2019 version 16.8 or higher. Except as noted, C11 and C17 library support requires Windows SDK build 10.0.20211.0 or higher. For more information on how to install support for C11 and C17, see Install C11 and C17 support in Visual Studio.
DR These features are enabled in all C++ /std
compiler option modes. The C++ Standard committee adopted this change as a retroactive Defect Report to C++11 and all later versions.
2104 C11 library support for this feature requires Windows SDK build 10.0.20348.0 (version 2104) or higher.
See alsoC++ Language Reference
C++ Standard Library
C++ conformance improvements in Visual Studio
What's New for Visual C++ in Visual Studio
Visual C++ change history 2003 through 2015
Visual C++ What's New 2003 through 2015
C++ team blog
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4