{{위키데이터 속성 추적}}
{{C++ 언어 버전}}
'''C++20'''은 [[C++]] 프로그래밍 언어를 위한 표준인 ISO/IEC의 개정판을 지칭하는 비공식적인 이름이다.<ref>{{웹 인용|url=https://herbsutter.com/2016/06/30/trip-report-summer-iso-c-standards-meeting-oulu/|title=The next standard after C++17 will be C++20|publisher=}}, by Herb Sutter</ref> C++20은 [[C++17]]의 후속작이다. 표준 위원회는 C++20 계획을 2017년 7월에 시작했다.<ref>{{웹 인용|url=https://isocpp.org/std/status|title=Current Status : Standard C++|publisher=}}</ref> 현재 기안은 N4750이다.<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4750.pdf|title=Working Draft, Standard for Programming Language C++}}</ref>

아래는 C++20에 추가되기로 제안되었거나 논의된 항목들의 일부이다.<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0592r0.html|title=P0592R0: To boldly suggest an overall plan for C++20|publisher=}}</ref>

== 새 기능 후보 ==
2017년 7월에 C++20의 초안에 포함되기로 건의된 항목들:<ref>{{웹 인용|url=https://herbsutter.com/2017/07/15/trip-report-summer-iso-c-standards-meeting-toronto/|title=Trip report: Summer ISO C++ standards meeting (Toronto)|author=[[Herb Sutter]]}}</ref>

* [[콘셉트 (C++)|콘셉트]]<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0606r0.pdf|title=P0606R0: Concepts Are Ready|publisher=}}</ref>
* 지정 생성자<ref>{{웹 인용|url=https://wg21.link/p0329|title=Designated Initialization Wording|author1=Tim Shen|author2=Richard Smith}}</ref> (designated initializer, [[C99]]의 기능 기반)
* 람다 갈무리(capture)에 <code>[=, this]</code> 사용 가능<ref>{{웹 인용|url=https://wg21.link/p0409|title=Allow lambda capture [=, this]|author=Thomas Köppe}}</ref>
* 람다에서 템플릿 파라미터 리스트 사용<ref>{{웹 인용|url=https://wg21.link/p0428|title=Familiar template syntax for generic lambdas}}</ref>

2017년 11월에 열린 가을 회의에서 C++20에 추가하기로 건의된 항목들:<ref>{{웹 인용|url=https://herbsutter.com/2017/11/11/trip-report-fall-iso-c-standards-meeting-albuquerque/|title=Trip report: Fall ISO C++ standards meeting (Albuquerque)|author=[[Herb Sutter]]}}</ref>

* 우주선 연산자(<code>operator <=></code>)를 이용한 세갈래 비교(Three-way comparison)
* 범위 기반 <code>for</code>문 안에서 추가 변수의 초기화
* <code>memcpy()</code>보다 덜 장황하면서 컴파일러 내부를 활용할 수 있게 해주는 비트 단위 객체 복사(Bit-casting of object representations)
* <code>std::shared_ptr</code>를 위한 <code>std::atomic</code>의 특수화
* 평가되지 않은 콘텍스트에서의 람다<ref>{{뉴스 인용|url=https://botondballo.wordpress.com/2017/11/20/trip-report-c-standards-meeting-in-albuquerque-november-2017/|title=Trip Report: C++ Standards Meeting in Albuquerque, November 2017|date=2017-11-20|work=There's Waldo!|access-date=2017-12-11|language=en-US}}</ref><ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0315r4.pdf|title=Wording for lambdas in unevaluated contexts|last=|first=|date=|website=|archive-url=|archive-date=|access-date=}}</ref>
* 생성과 할당이 가능하고 상태가 없는 기본 람다<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0624r2.pdf|title=Default constructible and assignable stateless lambdas|last=|first=|date=|website=|archive-url=|archive-date=|access-date=}}</ref>
* 람다 init-capture에서 pack expansion을 지원<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0780r0.html|title=Pack expansion in lambda init-capture|website=www.open-std.org|access-date=2017-12-11}}</ref>
* 템플릿 파라미터에서 문자열 리터럴 사용 가능<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0424r2.pdf|title=String literals as non-type template parameters|last=|first=|date=|website=|archive-url=|archive-date=|access-date=}}</ref>

그 외 가능성이 있는 항목들:

* 코루틴<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4649.pdf|title=N4649: Working Draft, Technical Specification on C++ Extensions for Coroutines|publisher=}}</ref> - Clang 5에서 시험적으로 지원함<ref>{{웹 인용|url=http://releases.llvm.org/5.0.2/tools/clang/docs/ReleaseNotes.html#c-coroutines|title=Clang 5 Release Notes on coroutines|publisher=}}</ref>
* 모듈<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4637.pdf|title=N4637: Working Draft, Extensions to C++ for Modules|publisher=}}</ref> - Clang 5<ref>{{웹 인용|url=https://clang.llvm.org/docs/Modules.html|title=Clang 5 documentation on Modules|publisher=}}</ref>와 비주얼스튜디오 2015 업데이트 1<ref>{{웹 인용|url=https://blogs.msdn.microsoft.com/vcblog/2015/12/03/c-modules-in-vs-2015-update-1/|title=C++ Modules in VS 2015 Update 1|publisher=}}</ref>에서 시험 적용
* [[소프트웨어 트랜잭셔널 메모리|트랜잭셔널 메모리]]<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3341.pdf|title=N3341: Transactional Language Constructs for C++|publisher=}}</ref>
* 리플렉션<ref>{{웹 인용|url=https://meetingcpp.com/index.php/br/items/reflections-on-the-reflection-proposals.html|title=Reflections on the reflection proposals - Meeting C++|website=meetingcpp.com|language=en|access-date=2017-06-30}}</ref>
* 메타클래스<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0707r0.pdf|title=Metaclasses|author=[[Herb Sutter]]}}</ref>

== 라이브러리 변경 후보 ==

* 어토믹 스마트 포인터<ref>{{웹 인용|url=http://www.modernescpp.com/index.php/atomic-smart-pointers|title=Atomic Smart Pointers}}</ref> (<code>std::atomic_shared_ptr</code>와 <code>std::atomic_weak_ptr</code>)
* 확장된 <code>future</code><ref>{{웹 인용|url=http://www.modernescpp.com/index.php/functional-in-c-17-and-c-20|title=Functional in C++17 and C++20}}</ref>
* 래치와 배리어<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0342r0.html|title=P0342R0: Timing barriers|publisher=}}</ref>
* 네트워킹 확장<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4734.pdf|title=N4734: Working Draft, C++ Extensions for Networking|publisher=}}</ref>, async, 기본적인 I/O 서비스, 타이머, 버퍼와 버퍼 기반 스트림, 소켓, 인터넷 프로토콜 등
* 범위(range)<ref>{{웹 인용|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4651.pdf|title=N4651: Working Draft, C++ Extensions for Ranges|publisher=}}</ref>
* 태스크 블록<ref>{{웹 인용|url=http://www.modernescpp.com/index.php/task-blocks|title=Task Blocks|publisher=}}</ref>

== 참조 ==

* [[C++]]
* [[C++|C++98]]
* C++03
* [[C++11]]
* [[C++14]]
* [[C++17]]
* [[C11 (C 버전)]]
* C18 (C 버전)

== 각주 ==
{{각주}}

[[분류:C++]]
[[분류:프로그래밍 언어 표준]]