Visual Studio(MSVC)의 Microsoft C/C++ 컴파일러에 대한 표준 규칙은 진행 중인 작업입니다. 다음은 ISO 표준 C 및 C++ 언어 및 Visual Studio 버전의 라이브러리 적합성에 대한 요약입니다. 각 C++ 컴파일러 및 표준 라이브러리 기능 이름은 기능을 설명하는 ISO 표준 C++ 제안 문서에 연결됩니다(게시 시점에 사용 가능한 경우).
지원됨 열에는 기능에 대한 지원이 먼저 표시되는 Visual Studio 버전이 나열됩니다.
규칙 향상에 대한 자세한 내용은 Visual Studio의 C++ 규칙 향상을 참조하세요. 다른 변경 내용 목록은 Visual Studio에서 Microsoft C++의 새로운 기능(What's New for Microsoft C++)을 참조하세요. 이전 버전의 규칙 변경 내용에 대해서는 Visual C++ change history(Visual C++ 주요 변경 내용) 및 2003~ 2015 Visual C++ 주요 변경 내용을 참조하세요. C++ 팀의 최신 뉴스를 보려면 C++ 팀 블로그를 방문하세요.
C++ 컴파일러 기능
C++ 표준 라이브러리 기능
제품 버전별 표준 라이브러리 기능 및 버그 수정에 대한 자세한 목록은 GitHub Microsoft STL wiki 변경 로그 페이지에서 확인할 수 있습니다.
진행 중인 규칙 작업에 대한 최신 정보는 다음을 참조하세요.
| Feature |
Supported |
|
C++14 표준 라이브러리 기능 |
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 |
Visual Studio 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>() |
Visual Studio 2015 |
N3671 Dual-Range equal(), is_permutation(), mismatch() |
VS 2015 |
N3778 Sized Deallocation |
VS 2015 |
N3779 UDLs For <complex> (3.14i, etc.) |
Visual Studio 2015 (VS 2015) |
N3789 constexpr For <functional> |
VS 2015 |
N3887 tuple_element_t |
VS 2015 |
N3891 Renaming shared_mutex (Timed) To shared_timed_mutex |
Visual Studio 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 표준 라이브러리 기능 |
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 표준 라이브러리 기능(결함 보고서) |
Supported |
P0682R1 Repairing Elementary String Conversions |
VS 2017 15.7 17 |
P1164R1 Making create_directory() Intuitive |
VS 2019 16.0 14 |
|
C++20 표준 라이브러리 기능 |
Supported |
P0809R0 Comparing Unordered Containers |
VS 2010 14 |
P0858R0 Constexpr Iterator Requirements |
VS 2017 15.3 17 |
P0777R1 Avoiding Unnecessary Decay |
VS 2017 15.7 14 |
P0550R2 remove_cvref |
VS 2019 16.0 20 |
P0318R1 unwrap_reference, unwrap_ref_decay |
VS 2019 16.1 20 |
P0457R2 starts_with()/ends_with() For basic_string/basic_string_view |
VS 2019 16.1 20 |
P0458R2 contains() For Ordered And Unordered Associative Containers |
VS 2019 16.1 20 |
P0646R1 list/forward_list remove()/remove_if()/unique() Return size_type |
VS 2019 16.1 20 |
P0769R2 shift_left(), shift_right() |
VS 2019 16.1 20 |
P0887R1 type_identity |
VS 2019 16.1 20 |
P0020R6 atomic<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 표준 라이브러리 기능(결함 보고서) |
Supported |
P2325R3 Views Should Not Be Required To Be Default Constructible |
VS 2022 17.0 20abi |
P2328R1 join_view should join all views of ranges |
VS 2022 17.0 20abi |
P2367R0 Remove misuses of list-initialization from clause 24 ranges |
VS 2022 17.0 20abi |
P2259R1 Partial LWG issue resolution: repairing Input Range Adaptors and counted_iterator |
VS 2022 17.0 23 |
|
C++23 표준 라이브러리 기능 |
Supported |
P0288R9 move_only_function |
VS 2022 17.2 23 |
P0323R12 <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 빌드 도구 버전 14.5 24 |
P2290R3 Delimited escape sequences |
MSVC 빌드 도구 버전 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 |
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 빌드 도구 버전 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 빌드 도구 버전 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 |
함께 나열된 문서 그룹은 하나 이상의 승인된 향상 또는 확장과 함께 표준 기능을 나타냅니다. 이러한 기능은 함께 구현됩니다.
C 표준 라이브러리 기능
| Feature |
Supported |
|
C99 표준 라이브러리 기능 |
Supported |
대체 맞춤법 매크로 <iso646.h> |
VS 2015 |
와이드 문자 지원 <wchar.h> 및 <wctype.h> |
VS 2015 |
<complex.h>의 복잡한 지원 |
VS 2015에서 부분적으로 K |
형식 제네릭 수학 함수 <tgmath.h> |
VS 2019 16.8 2104 |
추가 부동 소수점 특성 <float.h> |
VS 2015 |
16진수 float printf 지정자 %A, %a |
VS 2015 |
확장된 정수 형식 <inttypes.h>, <stdint.h> |
VS 2015 |
vscanf 및 <stdio.h>의 <wchar.h> 제품군 |
VS 2015 |
<math.h>의 새 수학 함수 |
VS 2015 |
수학 라이브러리 오류 조건 처리(math_errhandling) |
VS 2015 |
부동 소수점 환경 액세스 <fenv.h> |
VS 2015 |
%lf에 대한 printf 변환 지정자 |
VS 2015 |
snprintf 함수의 <stdio.h> 패밀리 |
VS 2015 |
boolean의 <stdbool.h> 형식 |
VS 2015 |
va_copy 매크로 |
VS 2015 |
추가 strftime 변환 지정자 |
VS 2015에서 부분적으로 L |
|
C11 표준 라이브러리 기능 |
Supported |
맞춤 지정자 <stdalign.h> |
VS 2019 16.8 C11, 2104 |
aligned_alloc |
없음 M |
반환 지정자 <stdnoreturn.h> 없음 |
VS 2019 16.8 C11, 2104 |
스레딩 지원 <threads.h> |
yes |
원자성 지원 <stdatomic.h> |
experimental |
char16_t, char32_t<uchar.h> |
VS 2019 16.8 C11 |
gets()가 제거됨 |
VS 2019 16.8 C11, N |
gets_s() |
VS 2019 16.8 C11 |
경계 검사 인터페이스(*_s API) |
VS 2015에서 부분적으로 C11, O |
fopen
"x" 옵션 |
VS 2019 16.8 C11 |
| 정적 어설션 |
VS 2019 16.8 C11, 2104 |
quick_exit |
VS 2019 16.8 C11 |
<complex.h> 매크로 |
VS 2019 16.8 C11 |
부동 소수점 특성 <float.h> |
VS 2019 16.8 C11 |
C11 스레드 <threads.h> |
VS 2022 17.8 C11 |
지원되는 값
아니요 아직 구현되지 않았습니다.
부분적 구현이 완료되지 않았습니다. 자세한 내용은 참고 섹션을 참조하세요.
VS 2010 Visual Studio 2010에서 지원됩니다.
VS 2013 Visual Studio 2013에서 지원됩니다.
VS 2015 Visual Studio 2015(RTW)에서 지원됩니다.
VS 2015.2 및 VS 2015.3은 각각 Visual Studio 2015 업데이트 2와 Visual Studio 2015 업데이트 3에서 지원되는 기능을 나타냅니다.
VS 2017 15.0 Visual Studio 2017 버전 15.0(RTW)에서 지원됩니다.
VS 2017 15.3 Visual Studio 2017 버전 15.3에서 지원됩니다.
VS 2017 15.5 Visual Studio 2017 버전 15.5에서 지원됩니다.
VS 2017 15.7 Visual Studio 2017 버전 15.7에서 지원됩니다.
VS 2019 16.0 Visual Studio 2019 버전 16.0(RTW)에서 지원됩니다.
VS 2019 16.1 Visual Studio 2019 버전 16.1에서 지원됩니다.
VS 2019 16.2 Visual Studio 2019 버전 16.2에서 지원됩니다.
VS 2019 16.3 Visual Studio 2019 버전 16.3에서 지원됩니다.
VS 2019 16.4 Visual Studio 2019 버전 16.4에서 지원됩니다.
VS 2019 16.5 Visual Studio 2019 버전 16.5에서 지원됩니다.
VS 2019 16.6 Visual Studio 2019 버전 16.6에서 지원됩니다.
VS 2019 16.7 Visual Studio 2019 버전 16.7에서 지원됩니다.
VS 2019 16.8 Visual Studio 2019 버전 16.8에서 지원됩니다.
VS 2019 16.9 Visual Studio 2019 버전 16.9에서 지원됩니다.
VS 2019 16.10 Visual Studio 2019 버전 16.10에서 지원됩니다.\
VS 2022 17.0 Visual Studio 2022 버전 17.0에서 지원됩니다.
VS 2022 17.1 Visual Studio 2022 버전 17.1에서 지원됩니다.
VS 2022 17.2 Visual Studio 2022 버전 17.2에서 지원됩니다.
VS 2022 17.3 Visual Studio 2022 버전 17.3에서 지원됩니다.
VS 2022 17.4 Visual Studio 2022 버전 17.4에서 지원됩니다.
VS 2022 17.5 Visual Studio 2022 버전 17.5에서 지원됩니다.
MSVC 빌드 도구 버전 14.50 Visual Studio 2026 18.0(MSVC 컴파일러 버전 19.50) 이상에서 지원됩니다.
Notes
A 모드 /std:c++14에서, 컴파일러는 동적 예외 사양을 구현하지 않고 throw()을 __declspec(nothrow)의 동의어로 취급합니다. C++17에서 P0003R5는 한 가지 흔적을 제외하고 대부분의 동적 예외 사양을 제거했습니다. 표준에서는 throw()의 사용을 중단하고, noexcept와 동일하게 작동해야 한다고 요구합니다.
/std:c++17 모드에서 MSVC는 이제 throw(), 즉 종료를 통한 적용과 동일한 동작을 noexcept에 제공하여 표준을 준수합니다.
컴파일러 옵션 /Zc:noexceptTypes는 __declspec(nothrow)의 이전 동작을 요청합니다. 이후 버전의 C++에서는 throw()가 제거될 가능성이 높습니다. 표준 및 Microsoft 구현에서 이러한 변경 사항에 대한 응답으로 코드를 마이그레이션하는 것을 돕기 위해, 예외 사양 문제에 대한 새로운 컴파일러 경고가 /std:c++17 및 /permissive- 아래에 추가되었습니다.
B Visual Studio 2017 버전 15.7의 /permissive- 모드에서 지원됩니다. 자세한 내용은 Two-phase name lookup support comes to MSVC를 참조하세요.
C Visual Studio 2019 버전 16.6 이상에서는 컴파일러가 /Zc:preprocessor 옵션을 통해 표준 C99 전처리기를 완전히 구현합니다. (Visual Studio 2017 버전 15.8부터 16.5에서 컴파일러는 /experimental:preprocessor 컴파일러 옵션을 통해 표준 C99 전처리기를 지원합니다.) 이 옵션은 컴파일러 옵션 /std:c11 또는 /std:c17가 지정된 경우 기본적으로 설정되어 있습니다.
D/std:c++14 아래에서 표시하지 않을 수 있는 경고 C4984로 지원됩니다.
E 구현은 C++20 표준 라이브러리를 지원하는 데 충분합니다. 완전한 구현을 위해서는 이진 주요 변경 내용이 필요 합니다.
이상 컴파일러 옵션이 지정되면 /std:c++17 기능이 제거됩니다. 이러한 기능을 다시 사용하도록 설정하려면(최신 언어 모드로 쉽게 전환하기 위해) _HAS_AUTO_PTR_ETC, _HAS_FUNCTION_ALLOCATOR_SUPPORT, _HAS_OLD_IOSTREAMS_MEMBERS 및 _HAS_UNEXPECTED 매크로를 사용합니다.
G C++17의 병렬 알고리즘 라이브러리가 완료되었습니다. 이는 모든 경우에서 모든 알고리즘이 병렬 처리된다는 것을 의미하지는 않습니다. 가장 중요한 알고리즘은 병렬 처리됩니다. 구현이 알고리즘을 병렬 처리하지 않는 경우에도 실행 정책 서명이 제공됩니다. 중앙 내부 헤더인 <yvals_core.h>에는 다음과 같은 "병렬 알고리즘 노트"가 있습니다. C++은 구현 시 직렬 알고리즘에 대한 호출로서 병렬 알고리즘을 구현할 수 있습니다. 이 구현은 몇 가지 일반적인 알고리즘 호출을 병렬 처리하지만 전부는 아닙니다.
다음 알고리즘은 병렬 처리됩니다.
-
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_eachfor_each_n, inclusive_scan, is_heapis_heap_until, is_partitioned, is_sortedis_sorted_untilmismatchnone_of, partitionreduceremoveremove_ifreplacereplace_ifsearchsearch_nset_difference, set_intersection, sort, stable_sort, transform, , transform_exclusive_scantransform_inclusive_scantransform_reduce
이러한 알고리즘은 현재 병렬 처리되지 않습니다.
- 이러한 알고리즘은 대상 하드웨어에서 눈에 띄는 병렬 처리 성능 향상을 보여 줍니다. 분기 없이 요소를 복사하거나 순열하기만 하는 모든 알고리즘은 일반적으로 메모리 대역폭이 제한됩니다.
-
copy, copy_n, fill, fill_n, move, reverse, reverse_copy, rotate, rotate_copyshift_leftshift_rightswap_ranges
- 위의 범주에서와 같이 이러한 알고리즘에서는 사용자 병렬 처리 요구 사항에 대해 혼란이 있을 수 있습니다.
- 이러한 알고리즘의 효과적인 병렬 처리는 가능하지 않을 수 있습니다.
-
partial_sort, partial_sort_copy
- 이러한 알고리즘은 아직 평가되지 않습니다. 향후 릴리스에서는 병렬 처리가 구현될 수 있습니다.
-
copy_if, includes, inplace_merge, lexicographical_compare, max_element, merge, , min_element, minmax_element, nth_element, , partition_copyremove_copyremove_copy_ifreplace_copyreplace_copy_ifset_symmetric_differenceset_unionstable_partitionuniqueunique_copy
H 이것은 완전히 새로운 구현이기 때문에 이전의 std::experimental 버전과 호환되지 않으며, symlink 지원, 버그 수정 및 표준 필수 동작의 변경이 필요합니다. 현재, <filesystem>에서는 새 std::filesystem과 이전 std::experimental::filesystem을 모두 제공합니다.
<experimental/filesystem> 헤더는 이전의 실험적 구현만 제공합니다. 실험적 구현은 다음 ABI의 최신 라이브러리 릴리스에서 제거될 예정입니다.
I 컴파일러 내장 함수에서 지원됩니다.
Jstd::byte는 /std:c++17 이상에서 사용하도록 설정되지만 경우에 따라 Windows SDK 헤더와 충돌할 수 있으므로 세분화된 옵트아웃 매크로가 있습니다. 사용하지 않도록 설정하려면 _HAS_STD_BYTE를 0으로 정의합니다.
K MSVC는 _Complex 키워드 또는 네이티브 복합 형식을 지원하지 않습니다. 유니버설 CRT <complex.h>는 구현 관련 매크로를 사용하여 동일한 효과를 얻습니다. 자세한 내용은 C 복합 수학 지원을 참조하세요.
L 유니버설 CRT는 strftimeE 및 O 대체 변환 한정자를 구현하지 않습니다. 이러한 한정자는 무시됩니다(예를 들어 %Oe는 %e와 동일하게 동작함). 기본 로캘 API는 한정자를 지원하지 않습니다.
M 유니버설 CRT는 C11 aligned_alloc를 구현하지 않으며 _aligned_malloc 및 _aligned_free를 제공합니다. Windows 운영 체제에서 관련 할당을 지원하지 않기 때문에 이 기능은 구현될 가능성이 낮습니다.
N 선언이 제거되지만 함수의 내보내기는 이전 버전과의 호환성을 위해 유지됩니다.
O 특정 경계 검사 함수가 구현되지 않거나, 다른 서명을 포함하거나, C11 또는 C17 표준에 속하지 않습니다.
abort_handler_s, ignore_handler_s, memset_s, set_constraint_handler_s, snprintf_s, snwprintf_s, strerrorlen_s, vsnwprintf_s 함수는 구현되지 않습니다.
gmtime_s, localtime_s, qsort_s, strtok_s, vsnprintf_s, wcstok_s 함수는 다른 시그니처를 포함합니다.
clearerr_s, fread_s 함수는 표준에 표시되지 않습니다.
P Visual Studio 2019 버전 16.10에 지원이 추가되었습니다. Visual Studio 2022 버전 17.0에서 Clang 지원이 추가되었습니다.
Qdeclare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety를 제거합니다. 이전에는 이러한 함수가 영향을 미치지 않았습니다.
R 일반적인 소스 주요 변경 내용입니다. 하지만 이전에 런타임에 정의되지 않은 동작이 있었던 코드는 이제 컴파일러 오류로 거부됩니다.
S 입력 범위 어댑터 및 counted_iterator는 VS 2022 17.0에서 구현됩니다. Visual Studio 2019 버전 16.11에 대한 향후 업데이트는 이러한 변경 내용을 통합할 예정입니다.
T<stdatomic.h>는 현재 C++(/std:c++latest)로 컴파일되는 경우에만 지원됩니다. C(/std:c11 및 /std:c17)로 컴파일되는 경우에는 아직 지원되지 않습니다
U 확장 부동 소수점 형식은 선택적 C++23 기능입니다. 이 기능은 C++23 표준화가 완료될 때까지 구현되지 않습니다.
V 컴파일러 옵션을 /source-charset:utf-8/we4828 사용하고 원본 파일을 UTF-8로 인코딩된 것으로 처리합니다.
14 이러한 C++17 및 C++20 기능은 /std:c++14(기본값)를 지정한 경우에도 항상 활성화됩니다. 이는 /std 옵션을 도입하기 전에 기능이 구현되었거나 조건부 구현이 바람직하지 않게 복잡했기 때문입니다.
17 이 기능은 /std:c++17 이상의 컴파일러 옵션을 통해 사용하도록 설정됩니다.
20 Visual Studio 2019 버전 16.10까지 이러한 기능은 /std:c++latest 컴파일러 옵션으로 설정됩니다. 이러한 기능을 사용하도록 설정하기 위해 Visual Studio 2019 버전 16.11에는 /std:c++20 컴파일러 옵션이 추가되었습니다.
20abi C++20 표준, <format>, <chrono>의 서식 지정 부분(<format>에 의존), <ranges>의 범위 팩토리 및 범위 어댑터(view 개념이 필요한 모든 것)는 /std:c++latest에서만 사용 가능합니다. 더 이상의 ABI 호환성이 손상되는 변경이 필요하지 않다는 WG21과의 합으에 도달한 후 /std:c++20에서 이러한 기능을 사용할 예정입니다.
<chrono>의 나머지 부분과 범위에 적용되는 알고리즘은 Visual Studio 2019 버전 16.11부터 /std:c++20 컴파일러 옵션에서 사용할 수 있습니다.
23 Visual Studio 2022 버전 17.0까지 이러한 기능은 /std:c++latest 컴파일러 옵션으로 설정됩니다.
24 MSVC 빌드 도구 버전 14.50 이상(Visual Studio 2026 버전 18.0과 함께 처음 제공됨)에서 이러한 기능은 컴파일러 옵션에서 /std:c++latest 사용하도록 설정됩니다.
C11 C11 및 C17에 대한 컴파일러 지원에는 Visual Studio 2019 버전 16.8 이상이 필요합니다. 명시된 경우를 제외하고 C11 및 C17 라이브러리 지원에는 Windows SDK 빌드 10.0.20211.0 이상이 필요합니다. C11 및 C17에 대한 지원을 설치하는 방법에 대한 자세한 내용은 Visual Studio에 C11 및 C17 지원 설치를 참조하세요.
DR 이러한 기능은 모든 C++ /std 컴파일러 옵션 모드에서 사용하도록 설정됩니다. C++ 표준 위원회는 이 변경 사항을 C++11 및 모든 이후 버전에 대한 소급 결함 보고서로 채택했습니다.
2104 이 기능에 대한 C11 라이브러리 지원을 위해서는 Windows SDK 빌드 10.0.20348.0(버전 2104) 이상이 필요합니다.
참고하십시오
C++ 언어 참조
C++ 표준 라이브러리
Visual Studio의 C++ 규칙 향상
Visual Studio의 Microsoft C++의 새로운 기능
Visual C++ 2003~2015 변경 내용
Visual C++ 2003~2015의 새로운 기능
C++ team blog(C++ 팀 블로그)