Visual C++ 언어 규칙Visual C++ Language Conformance

이 항목에서는 Visual Studio 2017 및 이전 버전의 C++ 컴파일러에 대한 컴파일러 기능 및 표준 라이브러리 기능의 ISO C++03, C++11, C++14, C++17 및 초안 C++20 언어 표준 규칙을 요약하고 있습니다.This topic summarizes the ISO C++03, C++11, C++14, C++17, and Draft C++20 language standards conformance of compiler features and Standard Library features for the C++ compiler in Visual Studio 2017 and earlier versions. 각 컴파일러 및 표준 라이브러리 기능 이름은 기능을 설명하는 ISO C++ 표준 제안 문서에 연결됩니다(게시 시점에 사용 가능한 경우).Each compiler and standard library feature name links to the ISO C++ Standard proposal paper that describes the feature, if one is available at publication time. [지원됨] 열에는 기능에 대한 지원이 먼저 표시되는 Visual Studio 버전이 나열됩니다.The Supported column lists the Visual Studio version in which support for the feature first appeared.

Visual Studio 2017의 규칙 향상 및 기타 변경 사항에 대한 자세한 내용은 Visual Studio 2017의 C++ 규칙 향상Visual Studio 2017의 Visual C++에 대한 새로운 기능 을 참조하세요.For details on conformance improvements and other changes in Visual Studio 2017, see C++ conformance improvements in Visual Studio 2017 and What's New for Visual C++ in Visual Studio 2017. 이전 버전의 규칙 변경 내용에 대해서는 Visual C++ change history(Visual C++ 주요 변경 내용) 및 2003~ 2015 Visual C++ 주요 변경 내용을 참조하세요.For conformance changes in earlier versions, see Visual C++ change history and Visual C++ What's New 2003 through 2015. C++ 팀의 최신 뉴스를 보려면 Visual C++ 팀 블로그를 방문하세요.For current news from the C++ team, visit the Visual C++ team blog.

참고

Visual Studio 2015 ~ Visual Studio 2017에서 새로운 이진 변경 내용이 없습니다.There are no binary breaking changes between Visual Studio 2015 and Visual Studio 2017.

컴파일러 기능Compiler Features

기능 영역Feature Area
C++03/11 핵심 언어 기능C++03/11 Core Language Features 지원됨Supported
  그 밖의 모든 항목  Everything else VS 2015 AVS 2015 A
  2단계 이름 조회  Two-phase name lookup VS 2017 15.7 BVS 2017 15.7 B
  N2634 Expression SFINAE  N2634 Expression SFINAE VS 2017 15.7VS 2017 15.7
  N1653 C99 전처리기  N1653 C99 preprocessor 부분 DPartial D
  N1988 확장된 정수 형식  N1988 Extended integer types 해당 없음 EN/A E
C++14 핵심 언어 기능C++14 Core Language Features 지원됨Supported
  N3323 컨텍스트 변환에 대해 조정된 표현  N3323 Tweaked wording for contextual conversions VS 2013VS 2013
  N3472 이진 리터럴  N3472 Binary literals VS 2015VS 2015
  N3638 auto 및 decltype(auto) 반환 형식  N3638 auto and decltype(auto) return types VS 2015VS 2015
  N3648 init 캡처  N3648 init-captures VS 2015VS 2015
  N3649 제네릭 람다  N3649 Generic lambdas VS 2015VS 2015
  N3760 [[deprecated]] 특성  N3760 [[deprecated]] attribute VS 2015VS 2015
  N3778 크기가 지정된 할당 해제  N3778 Sized deallocation VS 2015VS 2015
  N3781 자릿수 구분 기호  N3781 Digit separators VS 2015VS 2015
  N3651 변수 템플릿  N3651 Variable templates VS 2015.2VS 2015.2
  N3652 확장된 constexpr  N3652 Extended constexpr VS 2017VS 2017
  N3653 집계에 대한 NSDMI  N3653 NSDMIs for aggregates VS 2017VS 2017
  N3664 할당 방지/융합  N3664 Avoiding/fusing allocations 해당 없음 FN/A F
C++17 핵심 언어 기능C++17 Core Language Features 지원됨Supported
  N4086 삼중자 제거  N4086 Removing trigraphs VS 2010 14VS 2010 14
  N3922 중괄호로 묶인 Init 목록을 사용한 auto에 대한 새 규칙  N3922 New rules for auto with braced-init-lists VS 2015 14VS 2015 14
  N4051 템플릿 template-parameters의 typename  N4051 typename in template template-parameters VS 2015 14VS 2015 14
  N4266 네임스페이스 및 열거자에 대한 특성  N4266 Attributes for namespaces and enumerators VS 2015 14VS 2015 14
  N4267 u8 문자 리터럴  N4267 u8 character literals VS 2015 14VS 2015 14
  N4230 중첩된 네임스페이스 정의  N4230 Nested namespace definitions VS 2015.3 17VS 2015.3 17
  N3928 간결한 static_assert  N3928 Terse static_assert VS 2017 17VS 2017 17
  P0184R0 일반화된 범위 기반 for 루프  P0184R0 Generalized range-based for-loops VS 2017 14VS 2017 14
  P0188R1 [[fallthrough]] 특성  P0188R1 [[fallthrough]] attribute VS 2017 17VS 2017 17
  P0001R1 레지스터 키워드 제거  P0001R1 Removing the register keyword VS 2017 15.3 17VS 2017 15.3 17
  P0002R1 bool 형식 operator++ 제거  P0002R1 Removing operator++ for bool VS 2017 15.3 17VS 2017 15.3 17
  P0018R3 값으로 *this 캡처  P0018R3 Capturing *this by value VS 2017 15.3 17VS 2017 15.3 17
  P0028R4 반복 없이 특성 네임스페이스 사용  P0028R4 Using attribute namespaces without repetition VS 2017 15.3 17VS 2017 15.3 17
  P0061R1 __has_include  P0061R1 __has_include VS 2017 15.3 14VS 2017 15.3 14
  P0138R2 정수에서 고정 열거형 Direct-list-init  P0138R2 Direct-list-init of fixed enums from integers VS 2017 15.3 17VS 2017 15.3 17
  P0170R1 constexpr 람다  P0170R1 constexpr lambdas VS 2017 15.3 17VS 2017 15.3 17
  P0189R1 [[nodiscard]] 특성  P0189R1 [[nodiscard]] attribute VS 2017 15.3 17VS 2017 15.3 17
  P0212R1 [[maybe_unused]] 특성  P0212R1 [[maybe_unused]] attribute VS 2017 15.3 17VS 2017 15.3 17
  P0217R3 구조적 바인딩  P0217R3 Structured bindings VS 2017 15.3 17VS 2017 15.3 17
  P0292R2 constexpr if 문  P0292R2 constexpr if-statements VS 2017 15.3 GVS 2017 15.3 G
  P0305R1 이니셜라이저를 사용하는 선택 문  P0305R1 Selection statements with initializers VS 2017 15.3 17VS 2017 15.3 17
  P0245R1 Hexfloat 리터럴  P0245R1 Hexfloat literals VS 2017 15.5 17VS 2017 15.5 17
  N4268 더 많은 비형식 템플릿 인수 허용  N4268 Allowing more non-type template args VS 2017 15.5 17VS 2017 15.5 17
  N4295 식 폴딩  N4295 Fold expressions VS 2017 15.5 17VS 2017 15.5 17
  P0003R5 동적 예외 사양 제거  P0003R5 Removing dynamic-exception-specifications VS 2017 15.5 17VS 2017 15.5 17
  P0012R1 형식 시스템에 noexcept 추가  P0012R1 Adding noexcept to the type system VS 2017 15.5 17VS 2017 15.5 17
  P0035R4 과다 정렬된 동적 메모리 할당  P0035R4 Over-aligned dynamic memory allocation VS 2017 15.5 17VS 2017 15.5 17
  P0386R2 인라인 변수  P0386R2 Inline variables VS 2017 15.5 17VS 2017 15.5 17
  P0522R0 template-parameters 템플릿을 호환되는 인수와 일치  P0522R0 Matching template template-parameters to compatible arguments VS 2017 15.5 17VS 2017 15.5 17
  P0036R0 일부 비어 있는 단항 폴드 제거  P0036R0 Removing some empty unary folds VS 2017 15.5 17VS 2017 15.5 17
  N4261 한정 변환 수정  N4261 Fixing qualification conversions VS 2017 15.7 17VS 2017 15.7 17
  P0017R1 확장된 집계 초기화  P0017R1 Extended aggregate initialization VS 2017 15.7 17VS 2017 15.7 17
  P0091R3 클래스 템플릿에 대한 템플릿 인수 추론  P0091R3 Template argument deduction for class templates
  P0512R0 클래스 템플릿 인수 추론 문제(영문)  P0512R0 Class template argument deduction issues
VS 2017 15.7 17VS 2017 15.7 17
  P0127R2 자동으로 비형식 템플릿 매개 변수 선언  P0127R2 Declaring non-type template parameters with auto VS 2017 15.7 17VS 2017 15.7 17
  P0135R1 보장된 복사 생략  P0135R1 Guaranteed copy elision VS 2017 15.6HVS 2017 15.6H
  P0136R1 상속 생성자 다시 표시  P0136R1 Rewording inheriting constructors VS 2017 15.7 17VS 2017 15.7 17
  P0137R1 std::launder  P0137R1 std::launder VS 2017 15.7 17VS 2017 15.7 17
  P0145R3 식 계산 순서 구체화  P0145R3 Refining expression evaluation order
  P0400R0 함수 인수 평가 순서(영문)  P0400R0 Order of evaluation of function arguments
VS 2017 15.7 17VS 2017 15.7 17
  P0195R2 using 선언의 팩 확장  P0195R2 Pack expansions in using-declarations VS 2017 15.7 17VS 2017 15.7 17
  P0283R2 인식할 수 없는 특성 무시  P0283R2 Ignoring unrecognized attributes VS 2015 14VS 2015 14
  P0702R1 이니셜라이저 목록 작업자(initializer-list actors)에 대한 클래스 템플릿 인수 추론 문제 해결(영문)  P0702R1 Fixing class template argument deduction for initializer-list ctors VS 2017 15.7 17VS 2017 15.7 17
기능 영역Feature Area
C++17 핵심 언어 기능(결함 보고서)C++17 Core Language Features (Defect Reports) 지원됨Supported
  P0702R1 이니셜라이저 목록 작업자(initializer-list actors)에 대한 클래스 템플릿 인수 추론 문제 해결(영문)  P0702R1 Fixing class template argument deduction for initializer-list ctors VS 2017 15.7 17VS 2017 15.7 17
  P0588R1 암시적 람다 캡처 단순화  P0588R1 Simplifying implicit lambda capture 아니요No
  CWG 1581: constexpr 멤버 함수는 언제 정의됩니까?  CWG 1581: When are constexpr member functions defined? 아니요No
  P0962R1 구조화된 바인딩 사용자 지정 지점 찾기 규칙 완화  P0962R1 Relaxing the structured bindings customization point finding rules 아니요No
  P0962R2 range-for 루프 사용자 지정 지점 찾기 규칙 완화  P0962R2 Relaxing the range-for loop customization point finding rules 아니요No
  P0969R0 액세스할 수 있는 멤버에게 구조화된 바인딩 허용  P0969R0 Allowing structured bindings to accessible members 아니요No
기능 영역Feature Area
C++20 핵심 언어 기능C++20 Core Language Features 지원됨Supported
  P0306R4 쉼표 생략 및 쉼표 삭제에__VA_OPT__ 추가(영문)  P0306R4 Adding __VA_OPT__ for comma omission and comma deletion 아니요No
  P0329R4 지정된 초기화(영문)  P0329R4 Designated initialization 아니요No
  P0409R2 [=, this] 람다 캡처 허용(영문)  P0409R2 Allowing lambda-capture [=, this] 아니요No
  P0428R2 일반 람다에 대한 친숙한 템플릿 구문(영문)  P0428R2 Familiar template syntax for generic lambdas 아니요No
  P0683R1 비트 필드에 대한 기본 멤버 이니셜라이저(영문)  P0683R1 Default member initializers for bit-fields 아니요No
  P0704R1 멤버에 대한 const lvalue ref-qualified 포인터 수정(영문)  P0704R1 Fixing const lvalue ref-qualified pointers to members 아니요No
  P0734R0 개념(영문)  P0734R0 Concepts 아니요No

표준 라이브러리 기능Standard Library Features

기능 영역Feature Area
C++20 표준 라이브러리 기능C++20 Standard Library Features 지원됨Supported
   P0777R1 불필요한 Decay 방지   P0777R1 Avoiding Unnecessary Decay VS 2017 15.7 14VS 2017 15.7 14
  P0463R1 endian(영문)  P0463R1 endian 아니요No
  P0674R1 배열에 대한 make_shared()(영문)  P0674R1 make_shared() For Arrays 아니요No
  P0858R0 Constexpr 반복기의 요구 사항  P0858R0 Constexpr Iterator Requirements VS 2017 15.3 17VS 2017 15.3 17
  P0809R0 정렬되지 않은 컨테이너 비교  P0809R0 Comparing Unordered Containers VS 2010 14VS 2010 14
   P0020R3 원자성<float > 원자성<double > 원자성<long double >   P0020R3 atomic<float>, atomic<double>, atomic<long double> 아니요No
   P0053R7 <syncstream>   P0053R7 <syncstream>
   P0753R2 osyncstream 조작자   P0753R2 osyncstream Manipulators
아니요No
   P0122R7 <span>   P0122R7 <span> 아니요No
   P0202R3 <algorithm> 및 exchange()에 대한 constexpr   P0202R3 constexpr For <algorithm> And exchange() 아니요No
   P0355R7 <chrono> 일정 및 표준 시간대   P0355R7 <chrono> Calendars And Time Zones 아니요No
   P0415R1 <complex> (다시 실행)에 대한 constexpr   P0415R1 constexpr For <complex> (Again) 아니요No
   P0439R0 enum class memory_order   P0439R0 enum class memory_order 아니요No
   P0457R2 basic_string/basic_string_view에 대한 starts_with()/ends_with()   P0457R2 starts_with()/ends_with() For basic_string/basic_string_view 아니요No
   P0550R2 remove_cvref   P0550R2 remove_cvref 아니요No
   P0551R3 귀하는 표준 함수 템플릿을 특수화하지 않습니다!   P0551R3 Thou Shalt Not Specialize std Function Templates! 아니요No
   P0600R1 [[nodiscard]] The STL의 경우, 파트 1   P0600R1 [[nodiscard]] For The STL, Part 1 아니요No
   P0616R0 <numeric>에서 move() 사용   P0616R0 Using move() In <numeric> 아니요No
   P0653R2 to_address()   P0653R2 to_address() 아니요No
   P0718R2 원자성<shared_ptr<T>>, 원자성<weak_ptr<T>>   P0718R2 atomic<shared_ptr<T>>, atomic<weak_ptr<T>> 아니요No
   P0754R2 <version>   P0754R2 <version> 아니요No
   P0767R1 is_pod 사용 중단   P0767R1 Deprecating is_pod 아니요No
   P0768R1 우주선 비교 연산자에 대한 라이브러리 지원 <=>   P0768R1 Library Support For The Spaceship Comparison Operator <=> 아니요No
   P0966R1 string::reserve()는 축소하지 않아야 함   P0966R1 string::reserve() Should Not Shrink 아니요No
C++17 표준 라이브러리 기능C++17 Standard Library Features 지원됨Supported
  P0433R2 클래스 템플릿에 대한 템플릿 추론을 표준 라이브러리에 통합(영문)  P0433R2 Integrating template deduction for class templates into the standard library
  P0739R0 표준 라이브러리에 클래스 템플릿 인수 추론 통합 향상(영문)  P0739R0 Improving class template argument deduction integration into the standard library
VS 2017 15.7VS 2017 15.7
  P0426R1 char_traits에 대한 constexpr  P0426R1 constexpr For char_traits VS 2017 15.7VS 2017 15.7
  P0030R1 hypot(x, y, z)  P0030R1 hypot(x, y, z) VS 2017 15.7VS 2017 15.7
  P0220R1 라이브러리 기본 사항 V1  P0220R1 Library Fundamentals V1 VS 2017 15.6 JVS 2017 15.6 J
  P0067R5 기본 문자열 변환  P0067R5 Elementary String Conversions VS 2017 15.7 charconvVS 2017 15.7 charconv
  N4562 라이브러리 기본 사항: <memory_resource>  N4562 Library Fundamentals: <memory_resource>
  P0337R0 polymorphic_allocator 할당 삭제  P0337R0 Deleting polymorphic_allocator Assignment
VS 2017 15.6VS 2017 15.6
  P0024R2 병렬 알고리즘  P0024R2 Parallel Algorithms
  P0336R1 병렬 실행 정책 이름 바꾸기  P0336R1 Renaming Parallel Execution Policies
  P0394R4 예외가 발생할 경우 병렬 알고리즘을 종료()해야 함  P0394R4 Parallel Algorithms Should terminate() For Exceptions
  P0452R1 <numeric> 병렬 알고리즘 통합(영문)  P0452R1 Unifying <numeric> Parallel Algorithms
VS 2017 15.7VS 2017 15.7
  P0226R1 수학 특수 함수  P0226R1 Mathematical Special Functions VS 2017 15.7VS 2017 15.7
  P0218R1 <filesystem>  P0218R1 <filesystem>
  P0219R1 파일 시스템에 대한 상대 경로  P0219R1 Relative Paths For Filesystem
  P0317R1 파일 시스템에 대한 디렉터리 항목 캐싱(영문)  P0317R1 Directory Entry Caching For Filesystem
  P0392R0 파일 시스템 경로에서 string_view 지원  P0392R0 Supporting string_view In Filesystem Paths
  P0430R2 비POSIX 파일 시스템 지원(영문)  P0430R2 Supporting Non-POSIX Filesystems
  P0492R2 파일 시스템에 대한 NB 주석 해석(영문)  P0492R2 Resolving NB Comments for Filesystem
VS 2017 15.7 KVS 2017 15.7 K
  P0003R5 동적 예외 사양 제거  P0003R5 Removing Dynamic Exception Specifications VS 2017 15.5 17VS 2017 15.5 17
  P0005R4 not_fn()  P0005R4 not_fn()
  P0358R1 not_fn()에 대한 수정 사항  P0358R1 Fixes For not_fn()
VS 2017 15.5 17VS 2017 15.5 17
  P0033R1 enable_shared_from_this 다시 표시  P0033R1 Rewording enable_shared_from_this VS 2017 15.5 14VS 2017 15.5 14
  P0083R3 맵 및 집합 스플라이스  P0083R3 Splicing Maps And Sets
  P0508R0 명확히 insert_return_type 설명  P0508R0 Clarifying insert_return_type
VS 2017 15.5 17VS 2017 15.5 17
  P0174R2 남아 있는 라이브러리 파트 사용 중단  P0174R2 Deprecating Vestigial Library Parts VS 2017 15.5 17VS 2017 15.5 17
  P0302R1 std::function에서 할당자 지원 제거  P0302R1 Removing Allocator Support In std::function VS 2017 15.5 17VS 2017 15.5 17
  P0414R2 shared_ptr<T[]>, shared_ptr<T[N]>  P0414R2 shared_ptr<T[]>, shared_ptr<T[N]>
  P0497R0 배열에 대한 shared_ptr 해결  P0497R0 Fixing shared_ptr For Arrays
VS 2017 15.5 14VS 2017 15.5 14
  P0521R0 shared_ptr::unique() 사용 중단  P0521R0 Deprecating shared_ptr::unique() VS 2017 15.5 17VS 2017 15.5 17
  P0607R0 표준 라이브러리에 대한 인라인 변수(영문)  P0607R0 Inline Variables for the Standard Library VS 2017 15.5 17VS 2017 15.5 17
  P0618R0 <codecvt> 사용 중단(영문)  P0618R0 Deprecating <codecvt> VS 2017 15.5 17VS 2017 15.5 17
  N4562 라이브러리 기본 사항: Boyer-Moore search()  N4562 Library Fundamentals: Boyer-Moore search()
  P0253R1 검색자 반환 형식 수정  P0253R1 Fixing Searcher Return Types
VS 2017 15.3 17VS 2017 15.3 17
  P0031R0 <array>(다시 실행) 및 <iterator>에 대한 constexpr  P0031R0 constexpr For <array> (Again) And <iterator> VS 2017 15.3 17VS 2017 15.3 17
  P0040R3 메모리 관리 도구 확장  P0040R3 Extending Memory Management Tools VS 2017 15.3 17VS 2017 15.3 17
  P0084R2 Emplace 반환 형식  P0084R2 Emplace Return Type VS 2017 15.3 17VS 2017 15.3 17
  P0152R1 atomic::is_always_lock_free  P0152R1 atomic::is_always_lock_free VS 2017 15.3 17VS 2017 15.3 17
  P0154R1 hardware_destructive_interference_size 등  P0154R1 hardware_destructive_interference_size, etc. VS 2017 15.3 17VS 2017 15.3 17
  P0156R2 Variadic lock_guard를 scoped_lock으로 이름 바꾸기(영문)  P0156R2 Renaming Variadic lock_guard to scoped_lock VS 2017 15.3 17VS 2017 15.3 17
  P0258R2 has_unique_object_representations  P0258R2 has_unique_object_representations VS 2017 15.3 LVS 2017 15.3 L
  P0295R0 gcd(), lcm()  P0295R0 gcd(), lcm() VS 2017 15.3 17VS 2017 15.3 17
  P0298R3 std::byte(영문)  P0298R3 std::byte VS 2017 15.3 17, byteVS 2017 15.3 17, byte
  P0403R1 <string_view>용 UDL("meow"sv 등)  P0403R1 UDLs For <string_view> ("meow"sv, etc.) VS 2017 15.3 17VS 2017 15.3 17
  P0418R2 atomic compare_exchange memory_order 요구 사항  P0418R2 atomic compare_exchange memory_order Requirements VS 2017 15.3 14VS 2017 15.3 14
  P0435R1 common_type 점검  P0435R1 Overhauling common_type
  P0548R1 Tweaking common_type 및 기간 조정(영문)  P0548R1 Tweaking common_type and duration
VS 2017 15.3 14VS 2017 15.3 14
  P0505R0 <chrono>(다시 실행)에 대한 constexpr  P0505R0 constexpr For <chrono> (Again) VS 2017 15.3 17VS 2017 15.3 17
  P0513R0 악성 공격 해시  P0513R0 Poisoning hash
  P0599R1 noexcept 해시(영문)  P0599R1 noexcept hash
VS 2017 15.3 14VS 2017 15.3 14
  P0516R0 shared_future 복사를 noexcept로 표시  P0516R0 Marking shared_future Copying As noexcept VS 2017 15.3 14VS 2017 15.3 14
  P0517R0 future_errc에서 future_error 생성  P0517R0 Constructing future_error From future_errc VS 2017 15.3 14VS 2017 15.3 14
  P0558R1 원자성 이름 지정 기본 클래스 불일치 해결(영문)  P0558R1 Resolving atomic Named Base Class Inconsistencies VS 2017 15.3 14VS 2017 15.3 14
  P0604R0 is_callable/result_of를 invoke_result, is_invocable, is_nothrow_invocable로 변경(영문)  P0604R0 Changing is_callable/result_of To invoke_result, is_invocable, is_nothrow_invocable VS 2017 15.3 17VS 2017 15.3 17
  N4562 라이브러리 기본 사항: <algorithm> sample()  N4562 Library Fundamentals: <algorithm> sample() VS 2017VS 2017
  N4562 라이브러리 기본 사항: <any>  N4562 Library Fundamentals: <any> VS 2017VS 2017
  N4562 라이브러리 기본 사항: <optional>  N4562 Library Fundamentals: <optional> VS 2017VS 2017
  N4562 라이브러리 기본 사항: <string_view>  N4562 Library Fundamentals: <string_view> VS 2017VS 2017
  N4562 라이브러리 기본 사항: <tuple> apply()  N4562 Library Fundamentals: <tuple> apply() VS 2017VS 2017
  P0032R3 variant/any/optional에 대한 동종 인터페이스  P0032R3 Homogeneous Interface For variant/any/optional VS 2017VS 2017
  P0077R2 is_callable, is_nothrow_callable  P0077R2 is_callable, is_nothrow_callable VS 2017VS 2017
  P0088R3 <variant>  P0088R3 <variant> VS 2017VS 2017
  P0163R0 shared_ptr::weak_type  P0163R0 shared_ptr::weak_type VS 2017VS 2017
  P0209R2 make_from_tuple()  P0209R2 make_from_tuple() VS 2017VS 2017
  P0254R2 string_view 및 std::string 통합  P0254R2 Integrating string_view And std::string VS 2017VS 2017
  P0307R2 선택적으로 크거나 같게 만들기  P0307R2 Making Optional Greater Equal Again VS 2017VS 2017
  P0393R3 Variant를 크거나 같게 만들기  P0393R3 Making Variant Greater Equal VS 2017VS 2017
  P0504R0 in_place_t/in_place_type_t<T>/in_place_index_t<I> 다시 방문  P0504R0 Revisiting in_place_t/in_place_type_t<T>/in_place_index_t<I> VS 2017VS 2017
  P0510R0 없음, 배열, 참조, 불완전한 형식의 variant 거부  P0510R0 Rejecting variants Of Nothing, Arrays, References, And Incomplete Types VS 2017VS 2017
  P0025R1 clamp()  P0025R1 clamp() VS 2015.3VS 2015.3
  P0185R1 is_swappable, is_nothrow_swappable  P0185R1 is_swappable, is_nothrow_swappable VS 2015.3VS 2015.3
  P0272R1 상수가 아닌 basic_string::data()  P0272R1 Non-const basic_string::data() VS 2015.3VS 2015.3
  N4387 쌍 및 튜플 향상  N4387 Improving pair And tuple VS 2015.2 14VS 2015.2 14
  N4508 shared_mutex(시간 제한 없음)  N4508 shared_mutex (Untimed) VS 2015.2 14VS 2015.2 14
  P0004R1 사용되지 않는 Iostreams 별칭 제거  P0004R1 Removing Deprecated Iostreams Aliases VS 2015.2 remVS 2015.2 rem
  P0006R0 형식 특성에 대한 변수 템플릿(is_same_v 등)  P0006R0 Variable Templates For Type Traits (is_same_v, etc.) VS 2015.2 14VS 2015.2 14
  P0007R1 as_const()  P0007R1 as_const() VS 2015.2 14VS 2015.2 14
  P0013R1 논리 연산자 형식 특성(conjunction 등)  P0013R1 Logical Operator Type Traits (conjunction, etc.) VS 2015.2 14VS 2015.2 14
  P0074R0 owner_less<>  P0074R0 owner_less<> VS 2015.2 14VS 2015.2 14
  P0092R1 <chrono> floor(), ceil(), round(), abs()  P0092R1 <chrono> floor(), ceil(), round(), abs() VS 2015.2 14VS 2015.2 14
  P0156R0 Variadic lock_guard  P0156R0 Variadic lock_guard VS 2015.2 14VS 2015.2 14
  N3911 void_t  N3911 void_t VS 2015 14VS 2015 14
  N4089 unique_ptr<T[]>에서 안전하게 변환  N4089 Safe Conversions In unique_ptr<T[]> VS 2015 14VS 2015 14
  N4169 invoke()  N4169 invoke() VS 2015 14VS 2015 14
  N4190 auto_ptr, random_shuffle() 및 이전 <functional> 항목 제거  N4190 Removing auto_ptr, random_shuffle(), And Old <functional> Stuff VS 2015 remVS 2015 rem
  N4258 noexcept 정리  N4258 noexcept Cleanups VS 2015 14VS 2015 14
  N4259 uncaught_exceptions  N4259 uncaught_exceptions() VS 2015 14VS 2015 14
  N4277 일반적으로 복사 가능한 reference_wrapper  N4277 Trivially Copyable reference_wrapper VS 2015 14VS 2015 14
  N4279 map/unordered_map에 대한 insert_or_assign()/try_emplace()  N4279 insert_or_assign()/try_emplace() For map/unordered_map VS 2015 14VS 2015 14
  N4280 size(), empty(), data()  N4280 size(), empty(), data() VS 2015 14VS 2015 14
  N4366 정확하게 unique_ptr 할당 제약  N4366 Precisely Constraining unique_ptr Assignment VS 2015 14VS 2015 14
  N4389 bool_constant  N4389 bool_constant VS 2015 14VS 2015 14
  P0063R3 C11 표준 라이브러리  P0063R3 C11 Standard Library VS 2015 C11, 14VS 2015 C11, 14
  N4510 vector/list/forward_list에서 불완전한 형식 지원  N4510 Supporting Incomplete Types In vector/list/forward_list VS 2013 14VS 2013 14
C++14 표준 라이브러리 기능C++14 Standard Library Features 지원됨Supported
  N3462 SFINAE-Friendly result_of  N3462 SFINAE-Friendly result_of VS 2015.2VS 2015.2
  N3302 <complex>에 대한 constexpr  N3302 constexpr For <complex> VS 2015VS 2015
  N3469 <chrono>에 대한 constexpr  N3469 constexpr For <chrono> VS 2015VS 2015
  N3470 <array>에 대한 constexpr  N3470 constexpr For <array> VS 2015VS 2015
  N3471 <initializer_list>, <tuple>, <utility>에 대한 constexpr  N3471 constexpr For <initializer_list>, <tuple>, <utility> VS 2015VS 2015
  N3545 integral_constant::operator()()  N3545 integral_constant::operator()() VS 2015VS 2015
  N3642 <chrono>, <string>에 대한 UDL(1729ms, "meow" 등)  N3642 UDLs For <chrono>, <string> (1729ms, "meow"s, etc.) VS 2015VS 2015
  N3644 Null 정방향 반복기  N3644 Null Forward Iterators VS 2015VS 2015
  N3654 quoted()  N3654 quoted() VS 2015VS 2015
  N3657 유형이 다른 연관 조회  N3657 Heterogeneous Associative Lookup VS 2015VS 2015
  N3658 integer_sequence  N3658 integer_sequence VS 2015VS 2015
  N3659 shared_mutex(시간 제한)  N3659 shared_mutex (Timed) VS 2015VS 2015
  N3668 exchange()  N3668 exchange() VS 2015VS 2015
  N3669 const 없는 constexpr 멤버 함수 수정  N3669 Fixing constexpr Member Functions Without const VS 2015VS 2015
  N3670 get<T>()  N3670 get<T>() VS 2015VS 2015
  N3671 이중 범위 equal(), is_permutation(), mismatch()  N3671 Dual-Range equal(), is_permutation(), mismatch() VS 2015VS 2015
  N3778 크기가 지정된 할당 해제  N3778 Sized Deallocation VS 2015VS 2015
  N3779 <complex>에 대한 UDL(3.14i 등)  N3779 UDLs For <complex> (3.14i, etc.) VS 2015VS 2015
  N3789 <functional>에 대한 constexpr  N3789 constexpr For <functional> VS 2015VS 2015
  N3887 tuple_element_t  N3887 tuple_element_t VS 2015VS 2015
  N3891 shared_mutex(시간 제한)의 이름을 shared_timed_mutex로 바꾸기  N3891 Renaming shared_mutex (Timed) To shared_timed_mutex VS 2015VS 2015
  N3346 최소 컨테이너 요소 요구 사항  N3346 Minimal Container Element Requirements VS 2013VS 2013
  N3421 투명 연산자 함수(less<> 등)  N3421 Transparent Operator Functors (less<>, etc.) VS 2013VS 2013
  N3655 <type_traits>에 대한 별칭 템플릿(decay_t 등)  N3655 Alias Templates For <type_traits> (decay_t, etc.) VS 2013VS 2013
  N3656 make_unique()  N3656 make_unique() VS 2013VS 2013
  N3924 rand() 권장 안 함  N3924 Discouraging rand() N/AN/A

함께 나열된 문서 그룹은 기능이 표준으로 선출되고 해당 기능을 개선하거나 확장하기 위한 문서도 하나 이상 선출되었음을 나타냅니다.A group of papers listed together indicates that a feature was voted into the Standard, and then one or more papers to improve or expand that feature were also voted in. 이러한 기능은 함께 구현됩니다.These features are implemented together.

지원되는 값Supported values

아니요__는 아직 구현되지 않은 것을 의미합니다.__No means not yet implemented.
부분__은 Visual Studio 2017에서 부분적으로 구현되었음을 의미합니다.__Partial means the implementation in Visual Studio 2017 is incomplete. 자세한 내용은 참고 섹션을 참조하세요.For more details, see the Notes section.
해당 없음__은 제안 문서에서 해당 기능을 설명하지 않음을 의미합니다.__N/A means the proposal papers do not describe features. 이러한 문서에서는 표준 언어를 변경했지만 구현자를 위한 작업을 만들지 않았습니다.These papers altered the language of the standard, but didn’t create any work for implementers. 이 기능은 목록의 완전성을 위해 표시됩니다.They’re listed here for completeness.
VS 2010__은 Visual Studio 2010에서 지원되는 기능을 나타냅니다.__VS 2010 indicates features that are supported in Visual Studio 2010.
VS 2013__은 Visual Studio 2013에서 지원되는 기능을 나타냅니다.__VS 2013 indicates features that are supported in Visual Studio 2013.
VS 2015__은 Visual Studio 2015 RTM에서 지원되는 기능을 나타냅니다.__VS 2015 indicates features that are supported in Visual Studio 2015 RTM.
VS 2015.2VS 2015.3__은 각각 Visual Studio 2015 업데이트 2와 Visual Studio 2015 업데이트 3에서 지원되는 기능을 나타냅니다.__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__은 Visual Studio 2017 RTM에서 지원되는 기능을 나타냅니다.__VS 2017 indicates features that are supported in Visual Studio 2017 RTM.
VS 2017 15.3__은 Visual Studio 2017 버전 15.3에서 지원되는 기능을 나타냅니다.__VS 2017 15.3 indicates features that are supported in Visual Studio 2017 version 15.3.
VS 2017 15.5__는 Visual Studio 2017 버전 15.5에서 지원되는 기능을 나타냅니다.__VS 2017 15.5 indicates features that are supported in Visual Studio 2017 version 15.5. VS 2017 15.7__는 Visual Studio 2017 버전 15.7에서 지원되는 기능을 나타냅니다.__VS 2017 15.7 indicates features that are supported in Visual Studio 2017 version 15.7.

노트Notes

A In /std:c++14 모드에서는 동적 예외 사양이 구현되지 않은 상태로 남아 있으며 throw()는 여전히 __declspec(nothrow)의 동의어로 처리됩니다.A In /std:c++14 mode, dynamic exception specifications remain unimplemented, and throw() is still treated as a synonym for __declspec(nothrow). C++17에서 동적 예외 사양은 P0003R5에 의해 대부분 제거되었으므로 1개의 vestige: throw()가 더 이상 사용되지 않으며 noexcept의 동의어로 작동해야 합니다.In C++17, dynamic exception specifications were mostly removed by P0003R5, leaving one vestige: throw() is deprecated and required to behave as a synonym for noexcept. In /std:c++17 모드에서 MSVC는 이제 noexcept, 즉 종료를 통한 적용과 동일한 동작을 throw()에게 제공하여 표준을 준수합니다.In /std:c++17 mode, MSVC now conforms to the Standard by giving throw() the same behavior as noexcept, i.e. enforcement via termination. 컴파일러 옵션 /Zc:noexceptTypes-는 __declspec(nothrow)의 이전 동작을 요청합니다.The compiler option /Zc:noexceptTypes- requests our old behavior of __declspec(nothrow). C++20에서 throw()가 제거될 가능성이 있습니다.It’s likely that throw() will be removed in C++20. 표준 및 구현에서 이러한 변경 사항에 대한 응답으로 코드를 마이그레이션하는 것을 돕기 위해 예외 사양 문제에 대한 새로운 컴파일러 경고가 /std:c++17/permissive- 아래에 추가되었습니다.To help with migrating code in response to these changes in the Standard and our implementation, new compiler warnings for exception specification issues have been added under /std:c++17 and /permissive-.
B Visual Studio 2017 버전 15.7의 /permissive- 모드에서 지원됩니다.B Supported in /permissive- mode in Visual Studio 2017 version 15.7. 자세한 내용은 2단계 이름 조회 지원이 MSVC에 제공을 참조하세요.See Two-phase name lookup support comes to MSVC for more information.
C Expression SFINAE에 대한 컴파일러의 지원은 Visual Studio 2015 업데이트 2 이후로 표준 라이브러리에 충분했습니다.C The compiler’s support for Expression SFINAE has been sufficient for the Standard Library since Visual Studio 2015 Update 2. /permissive- 모드가 설정되었는지 여부에 관계 없이 Visual Studio 2017 15.7에서 지원됩니다.Supported in Visual Studio 2017 15.7 regardless of whether /permissive- mode is set. 수정해야 할 몇 가지 버그가 남아 있습니다.Some bugs remain to be fixed. "고유한 태그 형식" 해결 방법은 더 이상 필요하지 않아 STL 구현에서 이 해결 방법을 제거했습니다.The “unique tag type” workaround is no longer necessary, and we’ve removed this workaround from our STL implementation.
D Visual Studio 2017에서는 C99 전처리기 규칙에 대한 컴파일러의 지원이 불완전합니다.D The compiler’s support for C99 Preprocessor rules is incomplete in Visual Studio 2017. Variadic 매크로는 지원되지만 전처리기의 동작에 많은 버그가 있습니다.Variadic macros are supported, but there are many bugs in the preprocessor’s behavior. 전처리기를 개편하고 곧 /permissive- 모드에 해당 변경 사항을 실험적으로 제공할 것입니다.We are overhauling the preprocessor, and will experimentally ship those changes under the /permissive- mode soon.
E 컴파일러에서 확장된 정수 형식을 지원할 수는 있지만 필수는 아니므로 [적용할 수 없음]으로 표시됩니다.E This is marked as Not Applicable because compilers are permitted, but not required, to support extended integer types. GCC 및 Clang와 마찬가지로 지원하지 않기로 선택했습니다.Like GCC and Clang, we’ve chosen not to support them.
F 마찬가지로 컴파일러에서 이 최적화를 구현할 수는 있지만 필수는 아니므로 [적용할 수 없음]으로 표시됩니다.F Similarly, this is marked as Not Applicable because compilers are permitted, but not required, to implement this optimization.
G /std:c++14 아래에서 억제 가능한 경고로 표시됩니다.G Supported under /std:c++14 with a suppressible warning.
J Visual Studio 2015에서 완전하지 않은 기능은 이 표의 다른 곳에 나와 있습니다.J Features that were not completed in Visual Studio 2015 are broken out elsewhere in this table.
K 이것은 완전히 새로운 구현이기 때문에 이전의 std::experimental 버전과 호환되지 않으며, symlink 지원, 버그 수정 및 표준 필수 동작의 변경이 필요합니다.K This is a completely new implementation, incompatible with the previous std::experimental version, necessitated by symlink support, bug fixes, and changes in standard-required behavior. 지금은 <filesystem>을 포함하면 새로운 std::filesystem과 이전 std::experimental::filesystem을 제공하고 <experimental/filesystem>을 포함하면 오래된 실험 구현만을 제공합니다.Currently, including <filesystem> provides the new std::filesystem and the previous std::experimental::filesystem, and including <experimental/filesystem> provides only the old experimental implementation. 실험적 구현은 다음 ABI-breaking 라이브러리 릴리스에서 제거될 것입니다.The experimental implementation will be REMOVED in the next ABI-breaking release of the libraries.
L 컴파일러 내장 함수에서 지원됩니다.L Supported by a compiler intrinsic.
14 이러한 C++17/20 기능은 /std:c++14(기본값)를 지정한 경우에도 항상 활성화됩니다.14 These C++17/20 features are always enabled, even when /std:c++14 (the default) is specified. 이는 /std 옵션을 도입하기 전에 기능이 구현되었거나 조건부 구현이 바람직하지 않게 복잡했기 때문입니다.This is either because the feature was implemented before the introduction of the /std options, or because conditional implementation was undesirably complex.
17 이러한 기능은 /std:c++17(또는 /std:c++latest) 컴파일러 옵션으로 활성화됩니다.17 These features are enabled by the /std:c++17 (or /std:c++latest) compiler option.
byte std::byte/std:c++17(또는 /std:c++latest)로 활성화되지만, 경우에 따라 Windows SDK 헤더와 충돌할 수 있으므로 세분화된 옵트아웃 매크로가 있습니다.byte std::byte is enabled by /std:c++17 (or /std:c++latest), but because it can conflict with the Windows SDK headers in some cases, it has a fine-grained opt-out macro. _HAS_STD_BYTE0으로 정의하여 비활성화할 수 있습니다.It can be disabled by defining _HAS_STD_BYTE as 0.
C11 유니버셜 CRT에서는 C99 strftime() E/O 대체 변환 지정자, C11 fopen() 단독 모드 및 C11 aligned_alloc()을 제외하고는 C++17에 필요한 C11 표준 라이브러리의 일부를 구현했습니다.C11 The Universal CRT implemented the parts of the C11 Standard Library that are required by C++17, with the exception of C99 strftime() E/O alternative conversion specifiers, C11 fopen() exclusive mode, and C11 aligned_alloc(). 후자는 C11에서 free()의 Microsoft 구현과 호환되지 않는 방식으로 free()에서 고도로 정렬된 할당을 처리할 수 있어야 하는 aligned_alloc()을 지정했기 때문에 구현되지 않을 것입니다.The latter is unlikely to be implemented, because C11 specified aligned_alloc() in a way that's incompatible with the Microsoft implementation of free(), namely, that free() must be able to handle highly aligned allocations.
rem /std:c++17(또는 /std:c++latest) 컴파일러 옵션이 지정되면 기능이 제거됩니다.rem Features removed when the /std:c++17 (or /std:c++latest) compiler option is specified. 이러한 기능에는 _HAS_AUTO_PTR_ETC, _HAS_FUNCTION_ALLOCATOR_SUPPORT, _HAS_OLD_IOSTREAMS_MEMBERS_HAS_UNEXPECTED 옵트아웃 매크로가 있습니다.These features have opt-out macros: _HAS_AUTO_PTR_ETC, _HAS_FUNCTION_ALLOCATOR_SUPPORT, _HAS_OLD_IOSTREAMS_MEMBERS, and _HAS_UNEXPECTED.
charconv from_chars() 및 to_chars()는 정수에 사용할 수 있습니다.charconv from_chars() and to_chars() are available for integers. 현재 부동 소수점 to_chars() 앞에 와야 할 부동 소수점 from_chars()에 대해 작업 중입니다.We’re currently working on floating-point from_chars(), to be followed by floating-point to_chars().
parallel C++17의 병렬 알고리즘 라이브러리가 완료되었습니다.parallel C++17’s parallel algorithms library is complete. 이는 모든 경우에서 모든 알고리즘이 병렬 처리된다는 것을 의미하지는 않습니다. 가장 중요한 알고리즘이 병렬 처리되었으며 알고리즘이 병렬화되지 않은 경우에도 실행 정책 서명이 제공됩니다.Note that this doesn’t mean every algorithm is parallelized in every case; the most important algorithms have been parallelized and execution policy signatures are provided even where algorithms are not parallelized. STL 구현의 중앙 내부 헤더인 yvals.h에는 다음과 같은 "병렬 알고리즘 노트"가 있습니다. C++은 구현 시 직렬 알고리즘에 대한 호출로서 병렬 알고리즘을 구현할 수 있습니다.Our STL implementation’s central internal header, yvals.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, for_each, for_each_n, inclusive_scan, mismatch, none_of, reduce, remove, remove_if, search, search_n, sort, stable_sort, transform, transform_exclusive_scan, transform_inclusive_scan, transform_reduce.adjacent_difference, adjacent_find, all_of, any_of, count, count_if, equal, exclusive_scan, find, find_end, find_first_of, find_if, for_each, for_each_n, inclusive_scan, mismatch, none_of, reduce, remove, remove_if, search, search_n, sort, stable_sort, transform, transform_exclusive_scan, transform_inclusive_scan, transform_reduce.

다음은 현재 병렬 처리되지 않습니다.The following are not presently parallelized:

  • 대상 하드웨어에 대한 명백한 병렬 처리 성능 향상은 없습니다. 분기가 없는 요소를 단순히 복사하거나 치환하는 모든 알고리즘은 일반적으로 메모리 대역폭을 제한합니다.No apparent parallelism performance improvement on target hardware; all algorithms which merely copy or permute elements with no branches are typically memory bandwidth limited:
    • copy, copy_backward, copy_n, fill, fill_n, move, move_backward, remove, remove_if, replace, replace_if, reverse, reverse_copy, rotate, rotate_copy, swap_rangescopy, copy_backward, copy_n, fill, fill_n, move, move_backward, remove, remove_if, replace, replace_if, reverse, reverse_copy, rotate, rotate_copy, swap_ranges
  • 위의 범주에서 사용자 병렬 처리 요구 사항에 대한 혼란이 있을 수 있습니다.Confusion over user parallelism requirements exists; likely in the above category anyway:
    • generate, generate_ngenerate, generate_n
  • 실행할 수 없는 것으로 생각되는 유효한 병렬 처리:Effective parallelism suspected to be infeasible:
    • partial_sort, partial_sort_copypartial_sort, partial_sort_copy
  • 아직 평가되지 않았지만, 병렬 처리는 향후 릴리스에서 구현될 수 있으며 유익한 것으로 생각됩니다.Not yet evaluated; parallelism may be implemented in a future release and is suspected to be beneficial:
    • copy_if, includes, inplace_merge, is_heap, is_heap_until, is_partitioned, is_sorted, is_sorted_until, lexicographical_compare, max_element, merge, min_element, minmax_element, nth_element, partition_copy, remove_copy, remove_copy_if, replace_copy, replace_copy_if, set_difference, set_intersection, set_symmetric_difference, set_union, stable_partition, unique, unique_copycopy_if, includes, inplace_merge, is_heap, is_heap_until, is_partitioned, is_sorted, is_sorted_until, lexicographical_compare, max_element, merge, min_element, minmax_element, nth_element, partition_copy, remove_copy, remove_copy_if, replace_copy, replace_copy_if, set_difference, set_intersection, set_symmetric_difference, set_union, stable_partition, unique, unique_copy

참고 항목See also

C++ 언어 참조C++ Language Reference
C++ 표준 라이브러리C++ Standard Library
Visual Studio 2017의 C++ 규칙 향상C++ conformance improvements in Visual Studio 2017
Visual Studio 2017의 Visual C++에 대한 새로운 기능What's New for Visual C++ in Visual Studio 2017
2003~ 2015 Visual C++ 주요 변경 내용Visual C++ change history 2003 through 2015
Visual C++ 2003 ~ 2015의 새로운 기능Visual C++ What's New 2003 through 2015
Visual C++ 팀 블로그Visual C++ team blog