본문으로 이동

C++23

위키백과, 우리 모두의 백과사전.

C++23, 공식적으로 ISO/IEC 14882:2024,[1]C++20에 이어지는 C++ 프로그래밍 언어의 현재 개방형 표준이다. 이 버전의 최종 초안은 N4950이다.[2][3]

2020년 2월, 프라하에서 열린 C++20 최종 회의에서 C++23에 대한 전체 계획이 채택되었다.[4][5] C++23의 계획된 기능은 코루틴을 위한 라이브러리 지원, 모듈화된 표준 라이브러리, 실행자(executor), 네트워킹이었다.

C++23에 초점을 맞춘 첫 WG21 회의는 2020년 6월 초 바르나에서 열릴 예정이었으나, 코로나19 범유행으로 인해 취소되었다.[6][7] 2020년 11월 뉴욕 회의[8][7]와 2021년 2월 코나(Kona) 회의[8]도 마찬가지였다. 2022년 11월까지 모든 회의는 가상으로 진행되었고, 2022년 11월 회의부터 2023년 2월 최종 회의까지는 하이브리드 형식으로 진행되었다.[8] 이 표준은 2023년 2월 이서콰에서 열린 하이브리드 회의에서 WG21에 의해 기술적으로 최종 확정되었다.[9]

현대적인 "Hello, world" 예제

[편집]

작업 초안에 많은 라이브러리 변경 사항이 적용된 후, 새로운 "Hello, world" 프로그램은 다음과 같다.

import std;

int main() {
    std::println("Hello, world!");
}

기능

[편집]

C++23에 승인된 변경 사항은 다음과 같다.

언어

[편집]
  • 명시적 this 객체 매개변수[10]
  • if consteval[11]
  • 다차원 첨자 연산자[12]
  • 정적 호출 및 첨자 연산자와 정적 람다[13][14]
  • 암시적 이동 단순화[15]
  • auto(x)auto{x}[16]
  • 새로운 전처리기 지시문:
  • 범위 기반 for 루프에서 일부 임시 변수의 수명 연장[19]
  • 새로운 표준 속성 [[assume(expression)]][20]
  • 상속된 생성자로부터의 클래스 템플릿 인자 추론[21]
  • 복합 문의 끝에 있는 레이블[22]
  • 초기화 문 내의 별칭 선언[23]
  • std::size_t 및 해당 부호 있는 타입에 대한 리터럴 접미사[24]
  • 리터럴을 포함한 확장 부동 소수점 타입 (조건부 지원)[25]
  • 널리 람다 표현식의 선택적 ()[26]
  • 람다 표현식의 속성[27]
  • constexpr 변경 사항:
    • constexpr 함수 내의 비리터럴 변수, 레이블 및 goto[28]
    • constexpr 함수 내에서 상수 표현식으로 사용 가능한 staticthread_local 변수 허용[29]
    • constexpr 함수는 반환 타입과 매개변수 타입이 리터럴 타입일 필요가 없다.
    • 핵심 상수 표현식의 요구 사항을 만족하는 호출이 없는 constexpr 함수를 작성하는 것이 이제 가능하다.[30]
  • static_assertif constexpr에서 bool로의 컨텍스트적 축소 변환[31]
  • 라인 연결 전 공백 제거[32]
  • 선언 순서 레이아웃 의무화[33]
  • 구분된 이스케이프 시퀀스[34]
  • 이름 있는 유니버설 문자 이스케이프[35]
  • 텍스트 인코딩 변경 사항:
    • 이동 가능한 소스 파일 인코딩으로 UTF-8 지원[36]
    • 일관된 문자 리터럴 인코딩[37]
    • 문자 집합 및 인코딩[38]
  • this와 같은 일부 키워드에 새로운 의미 추가..[39]

라이브러리

[편집]

표준 라이브러리 모듈 지원

[편집]
  • 표준 라이브러리 모듈 stdstd.compat[40]

코루틴 라이브러리 지원

[편집]
  • 범위에 대한 동기식 코루틴 std::generator[41]

일반 유틸리티 지원

[편집]
  • 결과 타입 std::expected[42]
  • std::optional[43]std::expected[44]을 위한 모나드 연산
  • enum의 기본 값을 가져오는 유틸리티 함수 std::to_underlying[45]
  • 이동 전용 호출 가능 래퍼 std::move_only_function[46]
  • std::forward_like[47]
  • std::invoke_r[48]
  • std::bind_back[49]
  • std::byteswap[50]
  • std::unreachable: 접근할 수 없는 코드를 표시하는 함수[51]
  • std::tuple을 다른 튜플 유사 객체와 호환 가능하게 만들었다.[52]
  • 참조 타입을 반환하는 std::reference_wrapper에 대한 std::basic_common_reference 특수화 추가[53]
  • std::pair의 전달 생성자에 대한 기본 인자 추가[54]

컴파일 시간 지원

[편집]
  • constexpr 지원:
    • std::type_info::operator==[55]
    • std::bitset[56]
    • std::unique_ptr[57]
    • 일부 <cmath> 함수[58]
    • std::to_charsstd::from_chars의 정수 오버로드[59]
  • 메타프로그래밍 유틸리티:
    • 타입 트레잇 std::is_scoped_enum,[60] std::is_implicit_lifetime,[61] std::reference_constructs_from_temporary, 및 std::reference_converts_from_temporary.[62]
  • 비교 개념에 대한 이동 전용 타입 지원 추가[63]

이터레이터, 범위 및 알고리즘 지원

[편집]
  • 새로운 범위 변환 함수 std::ranges::to[64]
  • 새로운 제약이 있는 범위 알고리즘:
    • std::ranges::starts_with
    • std::ranges::ends_with[65]
    • std::ranges::contains
    • std::ranges::contains_subrange[66]
    • std::ranges::find_last 및 기타 변형[67]
    • iota, shift_leftshift_right의 범위화된 버전[68]
    • 범위 폴드 알고리즘[69]
  • 새로운 std::ranges::range_adaptor_closure, 사용자 정의 범위 어댑터 클로저를 정의하기 위한 헬퍼[49]
  • 새로운 범위 어댑터:
    • std::views::zip 및 기타 변형
    • std::views::adjacent 및 기타 변형[70]
    • std::views::join_with[71]
    • std::views::slide
    • std::views::chunk[72]
    • std::views::chunk_by[73]
    • std::views::as_rvalue[74]
    • std::views::as_const[75]
    • std::views::repeat[76]
    • std::views::stride[77]
    • std::views::cartesian_product[78]
    • std::views::enumerate[79]
  • 상수 이터레이터, 센티넬 및 범위를 수정하여 std::ranges::cbegin 및 기타 유사 유틸리티가 얕은 상수 뷰(예: std::span)의 경우에도 상수 이터레이터를 반환하도록 완전히 보장한다.[75]
  • 비범위 알고리즘의 입력으로 범위 이터레이터[80]
  • 이동 전용 타입을 허용하도록 범위 어댑터 완화[81]
  • 일부 뷰의 다중 매개변수 생성자를 explicit으로 만들었다.[82]

메모리 관리 지원

[편집]
  • C 상호 운용성을 위한 std::out_ptrstd::inout_ptr[83]
  • std::allocate_at_leaststd::allocator::allocate_at_least[84]
  • 암시적 수명 타입에 대한 명시적 수명 관리 함수 std::start_lifetime_as[85]
  • std::allocator_traits의 사용자 특수화 금지[86]

문자열 및 텍스트 처리 지원

[편집]
  • 새로운 멤버 함수 및 문자열 타입의 변경 사항:
    • std::basic_string_view::containsstd::basic_string::contains[87]
    • std::basic_stringstd::basic_string_view에 대한 nullptr로부터의 생성 비활성화[88]
    • std::basic_string_view에 대한 명시적 범위 생성자[89]
    • std::basic_string::resize_and_overwrite[90]
    • 효율적인 슬라이싱을 위한 std::basic_string::substr의 rvalue 참조 오버로드[91]
  • 범위, 튜플, 문자 및 문자열의 이스케이프된 표현, std::thread::id 및 스택 트레이스 포매팅.[92][93][94]

진단 지원

[편집]
  • 스택 트레이스 라이브러리[95]

I/O 지원

[편집]
  • 새로운 헤더 <print>에서 가져온 서식 있는 출력 함수 std::printstd::println[96]
  • 새로운 헤더 <spanstream>에서 가져온 spanstream 라이브러리(std::span 기반 문자열 스트림)[97]
  • std::fstream에서 독점 모드 지원[98]
  • std::basic_ostream::operator<<(const volatile void*)[99]

컨테이너 지원

[편집]
  • 다차원-스팬 std::mdspan[100][101][102][103]
  • 다른 호환 가능한 범위로부터의 컨테이너 생성 가능성 및 할당 가능성[64]
  • 평면 집합 및 평면 맵 컨테이너 어댑터[104][105]
  • 컨테이너 추론 가이드에서 할당자를 위한 비추론 컨텍스트[106]
  • 연관 컨테이너에 대한 이기종 삭제 오버로드[107]
  • 스택 및 큐에서 이터레이터 쌍 생성 허용[108]
  • std::spanstd::basic_string_view가 사소하게 복사 가능해야 함을 요구[109]

C 호환성 지원

[편집]
  • 새로운 헤더 <stdatomic.h>[110]

언어 결함 보고서

[편집]
  • 유니코드 표준 부록 31을 사용하는 C++ 식별자 구문[111]
  • 중복 속성 허용[112]
  • 람다 후행 반환 타입의 범위 변경[113]
  • 오버로드된 비교 연산자를 덜 파괴적인 변경으로 만들기[114]
  • Volatile 복합 할당의 폐기 해제[115][116]
  • char8_t의 호환성 및 이식성 문제 해결[117]
  • 기존 관행에 맞춰 wchar_t에 대한 요구 사항 완화[118]
  • 상수 표현식에서 this 또는 알 수 없는 출처의 일부 포인터 및 참조 허용[119]
  • 즉시 확장 함수를 즉시 함수로 승격[120]
  • 인스턴스화되지 않은 템플릿 컨텍스트에서 static_assert(false) 허용

라이브러리 결함 보고서

[편집]
  • 범위 라이브러리의 변경 사항:
    • 조건부로 빌려온 범위[121]
    • 입력 범위 어댑터 및 std::counted_iterator 수정[122]
    • std::ranges::join_view에 대한 제약 완화[123]
    • std::ranges::split_viewstd::ranges::lazy_split_view로 이름 변경 및 새로운 split_view[124]
    • 개념 std::ranges::view에서 std::default_initializable 제약 조건 제거[125]
    • 소유권을 가진 뷰와 새로운 std::ranges::owning_view[126]
    • std::ranges::istream_view 수정[127]
  • 텍스트 포매팅 라이브러리 변경 사항:
    • std::basic_format_string[128]
    • 컴파일 시간 형식 문자열 검사
    • std::format_to의 이진 코드 크기 감소[129]
    • chrono 포매터에서 로케일 처리 문제 해결[130]
    • 너비 추정 개선[131]std::format의 채움 문자 허용[132]
    • 비상수 포맷 가능 타입 허용을 위한 형식 인자에서 전달 참조 사용[133]
  • 완전히 constexprstd::variantstd::optional[134]
  • std::visit에서 std::variant에서 파생된 타입 지원[135]

제거된 기능 및 폐기

[편집]

제거된 기능:

  • 가비지 컬렉션 지원 및 (엄격한) 포인터 안전성[136] (즉, 완화된 포인터 안전성만 의존 가능[137]). 이 최소한의 가비지 컬렉션 지원(및 이를 위해 필요한 포인터 안전성)은 C++11에 추가되었지만, 어떤 컴파일러도 이를 지원한 적이 없으므로 C++23에서 제거되었다.[138] 그러나 이것이 Boehm GC와 같이 C++와 함께 많은 GC 구현이 사용되지 않았다는 것을 의미하지는 않으며, 디버그 모드에서 누수 감지를 위해 (또한 누수 감지에도) 사용될 수 있으며, 이러한 GC는 다른 언어에서 사용하기 위해 종종 C++로 구현된다.
  • 혼합 와이드 문자열 리터럴 연결.[139]
  • 인코딩 불가능한 와이드 문자 리터럴 및 다중 문자 와이드 문자 리터럴.[140]

폐기된 기능:

  • std::aligned_storagestd::aligned_union[141]
  • std::numeric_limits::has_denorm[142]

복원된 폐기된 기능:

  • 첨자 표현식에서 쉼표 연산자 사용은 더 이상 폐기되지 않았지만, 오버로드 가능한 n-adic operator[]를 지원하도록 의미가 변경되었다.
  • C 헤더 (C와의 호환성을 위한 해당 <*.h> 헤더)

기술 사양으로 발행됨

[편집]

컴파일러 지원

[편집]
  • 클랭은 2021년 버전 13부터 2024년 버전 18까지 C++23 부분 지원을 점진적으로 추가했으며, 옵션 -std=c++23을 통해 사용할 수 있다.[144]
  • GCC는 2021년 버전 11에서 옵션 -std=c++2b 또는 -std=c++23을 통해 C++23의 부분적, 실험적 지원을 추가했다. 또한 실험적인 C++23 지원 외에 GNU 확장을 활성화하는 옵션 -std=gnu++2b도 있다.[145]

역사

[편집]

대면 WG21 회의가 없는 상황에서, 다음 변경 사항들은 여러 가상 WG21 회의 후 적용되었으며, 여기서 여론조사(straw poll)를 통해 승인되었다.

2020년 11월

[편집]

2020년 11월 9일 가상 WG21 회의 후 다음 사항들이 추가되었으며, 여론조사를 통해 승인되었다.[146]

  • std::size_t 및 해당 부호 있는 타입에 대한 리터럴 접미사
  • 주어진 부분 문자열 또는 문자를 문자열이 포함하는지 확인하는 std::basic_stringstd::basic_string_view에 대한 멤버 함수 contains
  • Boost.Stacktrace를 기반으로 하는 스택 트레이스 라이브러리 (<stacktrace>)
  • 타입 트레잇 std::is_scoped_enum
  • C 원자(atomic)와의 상호 운용성을 위한 헤더 <stdatomic.h>

2021년 2월

[편집]

2021년 2월 22일 가상 WG21 회의 후, 다음 기능들이 추가되었으며 여론조사를 통해 승인되었다.[147]

  • 람다 표현식에서 불필요한 빈 매개변수 목록 () 제거.
  • 입력 범위 어댑터 및 counted_iterator 수정.
  • time_point::clock에 대한 요구 사항 완화.[148]
  • std::variant에서 파생된 클래스에 대한 std::visit.
  • 잠금 가능 객체를 잠근다.[149]
  • 조건부로 빌려온 범위.
  • std::to_underlying.

2021년 6월

[편집]

2021년 6월에 열린 여름 ISO C++ 표준 본회의 가상 회의 후, 새로운 기능과 결함 보고서가 여론조사를 통해 승인되었다.[150]

  • Consteval if (if consteval).
  • bool로의 컨텍스트적 축소 변환.
  • 중복 속성 허용.
  • std::span 기반 문자열 스트림 (<spanstream>).
  • std::out_ptr()std::inout_ptr().
  • std::optional, std::variantstd::type_info::operator==에 대한 constexpr.
  • std::stack (스택) 및 std::queue ()에 대한 이터레이터 쌍 생성자.
  • 범위 라이브러리의 몇 가지 변경 사항:
    • 임의 범위에 대한 일반화된 starts_withends_with.
    • split_viewlazy_split_view로 이름 변경 및 새로운 split_view.
    • join_view에 대한 제약 완화.
    • 개념 view에서 default_initializable 제약 조건 제거.
    • std::basic_string_view에 대한 범위 생성자.
  • nullptr로부터의 std::basic_stringstd::basic_string_view 생성 금지.
  • std::invoke_r.
  • std::format 개선.
  • std::pair의 전달 생성자에 기본 인자 추가.

2021년 10월

[편집]

2021년 10월에 열린 2021년 가을 ISO C++ 표준 본회의 가상 회의 후, 새로운 기능과 결함 보고서가 여론조사를 통해 승인되었다.[151]

  • 비리터럴 변수, 레이블 및 gotoconstexpr 함수에 허용되었지만, 컴파일 시간에 평가하는 것은 여전히 잘못된 형식이다.
  • 명시적 this 객체 매개변수.
  • 문자 집합 및 인코딩 변경 사항.
  • 새로운 전처리기: #elifdef#elifndef. 두 지시문은 C23 (C 언어 업데이트) 및 GCC 12에 추가되었다.[152]
  • 초기화 문에서 별칭 선언 허용.
  • 다차원 첨자 연산자 오버로드 (예: arr[1, 2]).
  • 언어 내 decay copy: auto(x) 또는 autox}.
  • 텍스트 포매팅 라이브러리 변경 사항:
    • chrono 포매터에서 로케일 처리 문제 해결.
    • std::generator 유사 타입을 허용하기 위해 형식 인자에서 전달 참조 사용.
  • std::pmr::polymorphic_allocator와 동등한 타입 별칭 std::pmr::stacktrace 추가.[153]
  • 범위 라이브러리 변경 사항:
    • 뷰의 정제된 정의.
    • 함수 템플릿 std::ranges::istream_view를 별칭 템플릿 std::ranges::istream_view, std::ranges::wistream_view 및 사용자 정의 지점 객체 std::views::istream으로 대체.
    • zip 범위 어댑터 패밀리:
      • zip_view
      • zip_transform_view
      • adjacent_view (및 std::views::pairwisestd::views::adjacent<2>와 동등)
      • adjacent_transform_view (및 std::views::pairwise_transformstd::views::adjacent_transform<2>와 동등)
  • std::move_only_function.
  • std::optional에 대한 모나드 연산.
  • 멤버 함수 템플릿 std::basic_string::resize_and_overwrite.
  • volatile 포인터 출력 (volatile T*).
  • std::byteswap.
  • 연관 컨테이너에 대한 이기종 삭제 오버로드.
  • std::spanstd::basic_string_view의 모든 특수화는 사소하게 복사 가능하다.
  • std::exchange에 조건부 noexcept 사양 추가.[154]
  • 정수 클래스 타입의 사양 및 사용 개편.[155]
  • C 헤더 명확화. "헤더는 C++로만 유효해야 하는 코드에서는 유용하지 않다. 따라서 C 헤더는 C++ 표준 라이브러리에서 완전히 지원되고 폐기되지 않은 부분으로 제공되어야 하지만, 다국어 상호 운용 코드(polyglot interoperability code)가 아닌 코드에서는 사용이 권장되지 않는다. [..] 이 제안은 C 헤더를 더 이상 폐기되지 않도록 하여 향후 제거될 formal threat를 없앤다. 순수 C++ 코드에서 C 헤더 사용을 자제하도록 하는 실질적인 권장 사항은 이제 규범적 권장 사항으로 명시적으로 명시된다."[156]

2022년 2월

[편집]

2022년 2월 7일 가상 WG21 회의 후, 다음 기능들이 추가되었으며 여론조사를 통해 승인되었다.[157]

  • 람다의 함수 호출 연산자에 속성 허용
  • std::expected
  • cmathcstdlib에 대한 constexpr
  • 접근할 수 없는 코드를 표시하는 함수
  • ranges::to
  • 임시 객체에 대한 참조 바인딩을 감지하는 타입 트레잇
  • std::unique_ptrconstexpr로 만들기
  • 사용자 정의 범위 어댑터에 대한 파이프 지원
  • ranges::iota, ranges::shift_leftranges::shift_right
  • views::join_with
  • 윈도잉 범위 어댑터: views::chunkviews::slide
  • views::chunk_by

2022년 7월

[편집]

2022년 7월 25일 가상 WG21 회의 후, 다음 기능 및 결함 보고서가 추가되었으며 여론조사를 통해 승인되었다.[158]

  • 표현식에서 동일성 재작성을 덜 파괴적인 변경으로 만들었다.
  • volatile 변수에 대한 비트별 할당 폐기 해제를 되돌렸다.
  • #warning 전처리기 지시어를 추가했다.
  • 인코딩 불가능한 와이드 문자 리터럴과 다중 문자 와이드 문자 리터럴을 제거했다.
  • 레이블이 복합 문의 끝에 나타날 수 있도록 허용했다.
  • 8진수 및 16진수에 대한 중괄호로 구분된 이스케이프 시퀀스와 유니버설 문자 이름을 추가했다.
  • constexpr 함수가 상수 표현식이 될 수 없도록 허용했다.
  • C++20의 일부 암시적 이동 규칙을 단순화하고 rvalue 참조를 반환할 때 암시적 이동을 허용했다.
  • 이름으로 유니코드 문자를 지정하는 방법을 추가했다. 예를 들어, U'\N{LATIN CAPITAL LETTER A WITH MACRON}' // Equivalent to U'\u0100'
  • operator() 및 람다가 static이 될 수 있도록 허용했다.
  • this 포인터와 알 수 없는 출처의 참조가 상수 표현식에 나타날 수 있도록 허용했다.
  • 세 가지 표준 부동 소수점 타입 외에 확장 부동 소수점 타입을 정의할 수 있도록 구현을 허용했다. 헤더 <stdfloat>를 통해 접근 가능한 이러한 확장 타입에 대한 타입 별칭 std::float16_t, std::float32_t, std::float64_t, std::float128_t, std::bfloat16_t와 해당 리터럴 접미사 f16 f32 f64 f128 bf16 또는 F16 F32 F64 F128 BF16을 추가하고, float를 인수로 받는 다양한 표준 라이브러리 함수에 오버로드를 추가했다.
  • 컴파일러가 제공된 표현식이 참이라고 가정하여 최적화를 허용하는 [[assume(expression)]] 속성을 추가했다.
  • 소스 파일의 이동 가능한 인코딩을 제공하기 위해 UTF-8 소스 파일 지원을 의무화했다.
  • charunsigned char 배열을 UTF-8 문자열 리터럴로 초기화할 수 있도록 허용했다.
  • 확장 문자 집합의 모든 문자를 인코딩할 수 있다는 wchar_t에 대한 요구 사항을 제거하여, UTF-16을 와이드 문자열 리터럴에 사용할 수 있도록 효과적으로 허용했다.
  • std::span과 유사한 다차원 배열 뷰인 std::mdspan을 추가했다.
  • flat_mapflat_set이 표준 라이브러리에 추가되었다.
  • 표준 출력에 서식 있는 텍스트를 출력하기 위한 std::printstd::println 함수를 추가했다.
  • 표준 라이브러리를 가져오기 위한 이름 있는 모듈 stdstd.compat를 제공한다.
  • fopen의 "x" 플래그와 유사하게 독점 모드 fstream에 대한 지원을 추가했다.
  • std::format이 범위, 튜플 및 기타 컨테이너를 처리할 수 있도록 허용했다.
  • std::forward_like를 추가했다.
  • std::string::substr이동 시맨틱스를 사용하도록 만들었다.
  • std::ranges::input_range를 모델링하는 코루틴 생성자를 구현하는 std::generator를 추가했다.
  • views::cartesian_product, views::repeat, views::stride, views::as_const, views::as_rvalue.
  • 새로운 알고리즘 추가: ranges::find_last, ranges::contains 및 범위 폴드 알고리즘.
  • std::tuple을 다른 튜플 유사 객체와 호환 가능하게 만들었다.
  • 암시적 수명 타입에 대한 명시적 수명 관리.
  • std::bitsetstd::to_charsstd::from_chars의 정수 오버로드를 constexpr-호환 가능하게 만들었다.
  • 비교 개념에 대한 이동 전용 타입 지원 추가.
  • 비범위 알고리즘의 입력으로 범위 이터레이터.
  • 이동 전용 타입을 허용하도록 범위 어댑터 완화.

2022년 11월

[편집]

2022년 11월 7일 하이브리드 WG21 회의 후, 다음 기능 및 결함 보고서가 추가되었으며 여론조사를 통해 승인되었다.[159]

  • operator[]static이 될 수 있도록 허용했다.
  • 상수 표현식에서 사용 가능한 경우, staticthread_local 변수가 constexpr 함수에 나타날 수 있도록 허용했다.
  • consteval이 위로 전파되도록 했다. 즉, 특정 기존 constexpr 함수는 컴파일 시간에만 호출될 수 있는 경우 consteval 함수가 된다.
  • 범위 기반 for 루프의 for-range-initializer에 나타나는 임시 변수의 수명을 전체 루프를 포함하도록 연장했다.
  • (비트별이 아닌 모든) 복합 할당volatile 변수에 대한 폐기 해제를 되돌렸다.
  • std::expected에 대한 모나드 함수.
  • 네이티브 유니코드 API가 사용되는 경우 std::print의 출력을 기본 스트림과 동기화한다.[160]

2023년 2월

[편집]

2023년 2월 6일부터 11일까지 열린 최종 하이브리드 WG21 회의 후, 다음 기능 및 결함 보고서가 추가되었으며 여론조사를 통해 승인되었다.[161]

  • 유니코드 표준 참조.[162]
  • 적절한 평탄화를 위한 스태싱 이터레이터 스태싱.[163]
  • views::enumerate
  • 뷰의 다중 매개변수 생성자를 명시적으로 만들기
  • 범위를 약간 더 완화
  • std::format의 이스케이프 개선
  • std::format의 너비 추정 개선
  • std::format 채움 문자 허용
  • thread::idstacktrace 포매팅
  • 타입 트레잇 std::is_implicit_lifetime
  • std::reference_wrapperstd::common_reference_t는 참조 타입이어야 한다.
  • std::allocator_traits의 사용자 특수화 금지
  • std::pmr::generator
  • std::numeric_limits::has_denorm 폐기
  • std::barrier의 페이즈 완료 보장

같이 보기

[편집]

각주

[편집]
  1. ISO/IEC 14882:2024 Programming languages — C++. iso.org.
  2. Working Draft, Standard for Programming Language C++ (PDF). Open Standards. ISO/IEC. 2023년 5월 10일. 2024년 2월 16일에 원본 문서 (PDF)에서 보존된 문서.
  3. N4951 Editors' Report: Programming Languages - C++. Open Standards. 2023년 5월 10일. 2023년 6월 5일에 원본 문서에서 보존된 문서.
  4. Dusíková, Hana (2019년 11월 6일). N4817: 2020 Prague Meeting Invitation and Information (PDF). Open Standards. 2019년 12월 29일에 원본 문서 (PDF)에서 보존된 문서. 2020년 2월 13일에 확인함.
  5. Voutilainen, Ville (2019년 11월 25일). To boldly suggest an overall plan for C++23. Open Standards. 2019년 12월 24일에 원본 문서에서 보존된 문서. 2020년 2월 13일에 확인함.
  6. Lelbach, Bryce Adelstein; Winters, Titus; Fracassi, Fabio; Baker, Billy; Liber, Nevin; Bastien, JF; Stone, David; Ballo, Botond; Keane, Erich; Honermann, Tom (2020년 4월 20일). P2145R0: Evolving C++ Remotely. Open Standards. 2024년 2월 12일에 원본 문서에서 보존된 문서.
  7. 1 2 Sutter, Herb (2020년 7월 29일). Business Plan and Convener's Report: ISO/IEC JTC1/SC22/WG21 (C++) (PDF).
  8. 1 2 3 Upcoming Meetings, Past Meetings : Standard C++. isocpp.org.
  9. C++23 "Pandemic Edition" is complete (Trip report: Winter ISO C++ standards meeting, Issaquah, WA, USA). herbsutter.com. 2023년 2월 13일.
  10. Gašper Ažman; Sy Brand; Ben Deane; Barry Revzin (2021년 7월 12일). Deducing this.
  11. Barry Revzin; Richard Smith; Andrew Sutton; Daveed Vandevoorde (2021년 3월 22일). if consteval.
  12. Mark Hoemmen; Daisy Hollman; Corentin Jabot; Isabella Muerte; Christian Trott (2021년 9월 14일). Multidimensional subscript operator (PDF).
  13. static operator(). 2022년 4월 8일.
  14. static operator[] (PDF). 2022년 11월 11일.
  15. Simpler implicit move. 2022년 3월 23일.
  16. Zhihao Yuan (2021년 7월 12일). auto(x): decay-copy in the language.
  17. Melanie Blower (2021년 4월 30일). Add support for preprocessing directives elifdef and elifndef (PDF).
  18. Aaron Ballman (2022년 1월 13일). Support for #warning (PDF).
  19. Wording for P2644R1 Fix for Range-based for Loop. 2022년 11월 11일.
  20. Portable assumptions (PDF). 2022년 4월 22일.
  21. Timur Doumler (2022년 5월 20일). Wording for class template argument deduction from inherited constructors (PDF).
  22. Labels at the end of compound statements (C compatibility) (PDF). 2022년 1월 13일.
  23. Jens Maurer (2021년 4월 13일). Extend init-statement to allow alias-declaration.
  24. JeanHeyd Meneide; Rein Halbersma (2019년 11월 24일). Literal Suffix for (signed) size_t.
  25. Extended floating-point types and standard names. 2022년 4월 22일.
  26. Alex Christensen; JF Bastien (2020년 12월 11일). P1102R2: Down with ()!.
  27. Attributes on Lambda-Expressions (PDF).
  28. Ville Voutilainen (2021년 7월 12일). Non-literal variables (and labels and gotos) in constexpr functions.
  29. Permitting static constexpr variables in constexpr functions. 2022년 11월 7일.
  30. Relaxing some constexpr restrictions. 2022년 1월 27일.
  31. Andrzej Krzemieński (2021년 4월 12일). Narrowing contextual conversions to bool.
  32. Corentin Jabot (2021년 4월 13일). Trimming whitespaces before line splicing (PDF).
  33. Pal Balog (2021년 4월 2일). Make declaration order layout mandated (PDF).
  34. Delimited escape sequences (PDF). 2022년 2월 25일.
  35. Named universal character escapes. 2022년 3월 25일.
  36. Support for UTF-8 as a portable source file encoding (PDF). 2022년 7월 1일.
  37. Corentin Jabot (2021년 9월 14일). Consistent character literal encoding (PDF).
  38. Jens Maurer (2021년 9월 21일). Character sets and encodings.
  39. C++ keywords - cppreference.com. en.cppreference.com. 2025년 7월 27일에 확인함.
  40. Standard Library Modules std and std.compat (PDF).
  41. (std::generator: Synchronous Coroutine Generator for Ranges) (PDF).
  42. Vicente Botet; JF Bastien; Jonathan Wakely (2022년 1월 7일). std::expected.
  43. Sy Brand (2021년 4월 27일). Monadic operations for std::optional.
  44. Jeff Garland (2022년 9월 28일). P2505R5 Monadic Functions for std::expected.
  45. JeanHeyd Meneide (2021년 1월 22일). std::to_underlying for enumerations.
  46. Matt Calabrese; Ryan McDougall (2021년 7월 9일). move_only_function.
  47. Gašper Ažman (2022년 5월 13일). std::forward_like (PDF).
  48. Zhihao Yuan (2020년 4월 29일). invoke_r.
  49. 1 2 Barry Revzin (2021년 12월 17일). Pipe support for user-defined range adaptors.
  50. Isabella Muerte; Corentin Jabot (2021년 9월 17일). Byteswapping for fun&&nuf.
  51. Melissa Mears; Jens Maurer (2021년 10월 15일). Function to mark unreachable code (PDF).
  52. Corentin Jabot (2022년 7월 15일). Compatibility between tuple, pair and tuple-like objects (PDF).
  53. Hui Xie; S. Levent Yilmaz; Tim Song (2023년 2월 7일). common_reference_t of reference_wrapper Should Be a Reference Type.
  54. Wording for P2644R1 Fix for Range-based for Loop. 2022년 11월 11일.
  55. Peter Dimov (2021년 5월 1일). Making std::type_info::operator== constexpr.
  56. Daniil Goncharov (2022년 6월 25일). A more constexpr bitset (PDF).
  57. Andreas Fertig (2021년 11월 6일). Making std::unique_ptr constexpr (PDF).
  58. Edward J. Rosten; Oliver J. Rosten (2021년 11월 12일). constexpr for <cmath> and <cstdlib> (PDF).
  59. Daniil Goncharov; Alexander Karaev (2021년 9월 18일). Add Constexpr Modifiers to Functions to_chars and from_chars for Integral Types in <charconv> Header (PDF).
  60. Juan Alday (2020년 10월 12일). A proposal for a type trait to detect scoped enumerations (PDF).
  61. Timur Doumler; Vittorio Romeo (2022년 11월 11일). A trait for implicit lifetime types (PDF).
  62. Tim Song (2021년 10월 13일). A type trait to detect reference binding to temporary.
  63. Justin Bassett (2022년 7월 2일). Move-only types for equality_comparable_with, totally_ordered_with, and three_way_comparable_with (PDF).
  64. 1 2 Corentin Jabot; Eric Niebler; Casey Carter (2022년 1월 21일). Conversions from ranges to containers (PDF).
  65. Christopher Di Bella (2021년 2월 19일). starts_with and ends_with.
  66. Christopher Di Bella (2021년 4월 16일). std::ranges::contains.
  67. Zach Laine (2022년 6월 17일). find_last (PDF).
  68. Tim Song (2021년 12월 5일). ranges::iota, ranges::shift_left, and ranges::shift_right.
  69. Barry Revzin (2022년 4월 22일). ranges::fold.
  70. Tim Song (2021년 6월 11일). zip.
  71. Barry Revzin (2022년 1월 28일). views::join_with.
  72. Tim Song (2021년 12월 5일). Windowing range adaptors: views::chunk and views::slide.
  73. Tim Song (2021년 11월 19일). views::chunk_by.
  74. Barry Revzin (2022년 2월 14일). views::as_rvalue.
  75. 1 2 Barry Revzin (2022년 6월 17일). cbegin should always return a constant iterator.
  76. Michał Dominiak (2022년 7월 13일). views::repeat.
  77. Christopher Di Bella; Tim Song (2022년 7월 8일). stride_view.
  78. Sy Brand; Michał Dominiak (2022년 7월 13일). views::cartesian_product.
  79. Corentin Jabot (2022년 12월 7일). views::enumerate (PDF).
  80. David Olsen (2022년 4월 22일). Ranges iterators as inputs to non-Ranges algorithms.
  81. Michał Dominiak (2022년 7월 13일). Relaxing range adaptors to allow for move only types.
  82. Ville Voutilainen (2022년 11월 12일). Making multi-param constructors of views explicit.
  83. JeanHeyd Meneide; Todor Buyukliev; Isabella Muerte (2021년 4월 15일). out_ptr - a scalable output pointer abstraction.
  84. Jonathan Wakely; Chris Kennelly (2021년 1월 22일). Providing size feedback in the Allocator interface.
  85. Timur Doumler; Richard Smith (2022년 7월 15일). Explicit lifetime management (PDF).
  86. Pablo Halpern (2023년 2월 8일). Disallow User Specialization of allocator_traits.
  87. Wim Leflere; Paul Fee (2020년 6월 13일). string contains function.
  88. Yuriy Chernyshov (2020년 9월 6일). A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr..
  89. Corentin Jabot (2021년 3월 17일). Range constructor forstd::string_view 2: Constrain Harder (PDF).
  90. Chris Kennelly; Mark Zeren (2021년 9월 14일). basic_string::resize_and_overwrite.
  91. std::string::substr() &&.
  92. Formatting Ranges. 2022년 5월 16일.
  93. Barry Revzin (2022년 7월 15일). Improve default container formatting.
  94. Corentin Jabot; Victor Zverovich (2023년 2월 9일). Formatting thread::id and stacktrace (PDF).
  95. Alexey Gorgurov; Antony Polukhin (2020년 9월 16일). A Proposal to add stacktrace library.
  96. Formatted output.
  97. Peter Sommerlad (2021년 2월 26일). A strstream replacement using span<charT> as buffer (PDF).
  98. Support exclusive mode for fstreams.
  99. Bryce Adelstein Lelbach (2021년 9월 25일). Printing volatile Pointers.
  100. MDSPAN. 2022년 7월 13일.
  101. index_type & size_type in mdspan (PDF).
  102. mdspan: rename pointer and contiguous. 2022년 6월 15일.
  103. Add the missing empty to mdspan.
  104. A Standard flat_map (PDF).
  105. A Standard flat_set (PDF).
  106. Arthur O'Dwyer; Mike Spertus (2021년 3월 14일). Stop overconstraining allocators in container deduction guides.
  107. Konstantin Boyarinov; Sergey Vinogradov; Ruslan Arutyunyan (2020년 12월 15일). Heterogeneous erasure overloads for associative containers.
  108. Corentin Jabot (2021년 3월 5일). Iterators pair constructors for stack and queue (PDF).
  109. Nevin Liber (2021년 3월 19일). Require span & basic_string_view to be TriviallyCopyable (PDF).
  110. Hans-J. Boehm (2020년 10월 23일). P0943R6: Support C atomics in C++.
  111. Steve Downey; Zach Laine; Tom Honermann; Peter Bindels; Jens Maurer (2021년 4월 12일). C++ Identifier Syntax using Unicode Standard Annex 31.
  112. Erich Keane (2020년 7월 2일). Allow Duplicate Attributes (PDF).
  113. Barry Revzin (2021년 9월 14일). Change scope of lambda trailing-return-type.
  114. The Equality Operator You Are Looking For. 2022년 1월 13일.
  115. De-deprecating volatile compound operations (PDF).
  116. Core Language Working Group NB comment resolutions for the November, 2022 meeting : 2654. Un-deprecation of compound volatile assignments.
  117. char8_t Compatibility and Portability Fix. 2022년 6월 17일.
  118. Relax requirements on wchar_t to match existing practices (PDF). 2022년 7월 15일.
  119. Using unknown pointers and references in constant expressions. 2022년 4월 8일.
  120. consteval needs to propagate up. 2022년 11월 11일.
  121. Barry Revzin (2020년 2월 19일). Conditionally borrowed ranges.
  122. Tim Song (2021년 1월 12일). Repairing input range adaptors and counted_iterator.
  123. Tim Song (2021년 5월 6일). join_view should join all views of ranges.
  124. Barry Revzin (2021년 3월 5일). Superior String Splitting.
  125. Barry Revzin (2021년 5월 14일). Views should not be required to be default constructible.
  126. Barry Revzin; Tim Song (2021년 8월 15일). What is a view?.
  127. Nicolai Josuttis (2021년 9월 24일). Fix istream_view (PDF).
  128. Barry Revzin (2022년 1월 18일). Expose std::basic-format-string<charT, Args...>.
  129. Victor Zverovich (2021년 2월 5일). std::format improvements.
  130. Victor Zverovich; Corentin Jabot (2021년 9월 11일). Fixing locale handling in chrono formatters.
  131. Corentin Jabot (2022년 12월 2일). format's width estimation is too approximate and not forward compatible (PDF).
  132. Tom Honermann (2023년 2월 8일). std::format() fill character allowances.
  133. Victor Zverovich (2021년 9월 24일). Add support for std::generator-like types to std::format.
  134. Barry Revzin (2021년 2월 11일). Missing constexpr in std::optional and std::variant.
  135. Barry Revzin (2020년 10월 30일). Inheriting from std::variant.
  136. std::pointer_safety - cppreference.com. en.cppreference.com. 2024년 12월 9일에 확인함.
  137. [basic.stc.dynamic.safety]. timsong-cpp.github.io. 2024년 12월 9일에 확인함.
  138. JF Bastien; Alisdair Meredith (2021년 4월 16일). Removing Garbage Collection Support.
  139. Jens Maurer (2021년 4월 12일). Mixed string literal concatenation.
  140. Remove non-encodable wide character literals and multicharacter wide character literals (PDF).
  141. CJ Johnson (2021년 11월 22일). Deprecate std::aligned_storage and std::aligned_union (PDF).
  142. Matthias Kretz (2022년 11월 8일). Deprecate numeric_limits::has_denorm (PDF).
  143. Programming Languages — Technical specification for C++ extensions for concurrency 2 (PDF).
  144. C++ Support in Clang.
  145. C++ Standards Support in GCC - GNU Project.
  146. Ranns, Nina (2020년 11월 19일). WG21 2020-11 Virtual Meeting: Minutes of Meeting (PDF).
  147. Ranns, Nina (2021년 2월 22일). WG21 2021-02 Virtual Meeting: Minutes of Meeting (PDF).
  148. Alexey Dmitriev; Howard Hinnant (2020년 10월 22일). Relax Requirements for time_point::clock.
  149. Tim Song (2020년 11월 13일). Locks lock lockables.
  150. Ranns, Nina (2021년 6월 7일). WG21 2021-06 Virtual Meeting Minutes of Meeting (PDF).
  151. Ranns, Nina (2021년 10월 4일). WG21 2021-10 Virtual Meeting Minutes of Meeting (PDF).
  152. GCC 12 Adds Support For New #elifdef #elifndef Directives. phoronix. 2021년 5월 12일. 2022년 12월 27일에 원본 문서에서 보존된 문서.
  153. Steve Downey (2021년 6월 14일). Add a pmr alias for std::stacktrace.
  154. Giuseppe D'Angelo (2021년 6월 28일). Add a conditional noexcept specification to std::exchange.
  155. Tim Song (2021년 8월 6일). Cleaning up integer-class types.
  156. Thomas Köppe (2021년 6월 11일). Clarifying the status of the "C headers".
  157. Ranns, Nina (2022년 2월 7일). WG21 2022-02 Virtual Meeting: Minutes of Meeting (PDF).
  158. Ranns, Nina (2022년 8월 9일). WG21 2022-07 Virtual Meeting: Minutes of Meeting (PDF).
  159. Ranns, Nina (2022년 12월 5일). WG21 2022-11 Hybrid Meeting: Minutes of Meeting (PDF).
  160. Victor Zverovich (2022년 11월 8일). Should the output of std::print to a terminal be synchronized with the underlying stream?.
  161. Ranns, Nina (2023년 3월 6일). WG21 2023-02 Hybrid Meeting: Minutes of Meeting (PDF).
  162. Corentin Jabot (2023년 2월 9일). Referencing The Unicode Standard (PDF).
  163. Tim Song (2023년 1월 31일). Stashing stashing iterators for proper flattening.