Skip to content

Commit

Permalink
C++26 : 残りのライブラリ更新概要を追加 #1166
Browse files Browse the repository at this point in the history
  • Loading branch information
faithandbrave committed Oct 12, 2023
1 parent 7ae71bb commit db656f4
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 0 deletions.
124 changes: 124 additions & 0 deletions lang/cpp26.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,73 @@ C++26とは、2026年中に改訂される予定の、C++バージョンの通


## ライブラリ更新の概要
### 新ライブラリ
- 文字列エンコーディングを識別するライブラリとして、[`<text_encoding>`](/reference/text_encoding.md.nolink)を追加
- 並行処理におけるデータの参照・更新を行うRCU (Read Copy Update) のライブラリとして、[`<rcu>`](/reference/rcu.md.nolink)を追加
- 並行処理において参照中のデータが更新されないよう保護するハザードポインタのライブラリとして、[`<hazard_pointer>`](/reference/hazard_pointer.md.nolink)を追加


### コンテナ
- [`std::mdspan`](/reference/mdspan/mdspan.md.nolink)のサブ配列版として[`std::submdspan`](/reference/mdspan/submdspan.md.nolink)を追加
- 連想コンテナの以下のメンバ関数に、一時オブジェクトが生成されるコストを抑える拡張を追加
- [`std::map`](/reference/map/map.md)
- [`operator[]`](/reference/map/map/op_at.md)
- [`at()`](/reference/map/map/at.md)
- [`try_emplace()`](/reference/map/map/try_emplace.md)
- [`insert_or_assign()`](/reference/map/map/insert_or_assign.md)
- [`std::set`](/reference/set/set.md)
- [`insert()`](/reference/set/set/insert.md)
- [`std::unordered_map`](/reference/unordered_map/unordered_map.md)
- [`operator[]`](/reference/unordered_map/unordered_map/op_at.md)
- [`at()`](/reference/unordered_map/unordered_map/at.md)
- [`try_emplace()`](/reference/unordered_map/unordered_map/try_emplace.md)
- [`insert_or_assign()`](/reference/unordered_map/unordered_map/insert_or_assign.md)
- [`bucket()`](/reference/unordered_map/unordered_map/bucket.md)
- [`std::unordered_multimap`](/reference/unordered_map/unordered_multimap.md)
- [`bucket()`](/reference/unordered_map/unordered_multimap/bucket.md)
- [`std::unordered_set`](/reference/unordered_set/unordered_set.md)
- [`insert()`](/reference/unordered_set/unordered_set/insert.md)
- [`bucket()`](/reference/unordered_set/unordered_set/bucket.md)
- [`std::unordered_multiset`](/reference/unordered_set/unordered_multiset.md)
- [`bucket()`](/reference/unordered_set/unordered_multiset/bucket.md)


### アルゴリズム
- 以下のアルゴリズムを`constexpr`に対応
- [`std::stable_sort()`](/reference/algorithm/stable_sort.md) / [`std::ranges::stable_sort()`](/reference/algorithm/ranges_stable_sort.md)
- [`std::stable_partition()`](/reference/algorithm/stable_partition.md) / [`std::ranges::stable_partition()`](/reference/algorithm/ranges_stable_partition.md)
- [`std::inplace_merge()`](/reference/algorithm/inplace_merge.md) / [`std::ranges::stable_partition()`](/reference/algorithm/ranges_inplace_merge.md)
- Rangeアルゴリズムが完全型を要求しないようにするため、[`std::projected`](/reference/iterator/projected.md)の制約を緩和


### 関数オブジェクト
- 所有権を保持しない[`std::function`](/reference/functional/function.md)として、[`<functional>`](/reference/functional.md)[`std::function_ref`](/reference/functional/function_ref.md.nolink)クラスを追加
- [`std::move_only_function`](/reference/functional/move_only_function.md)のコピー可能版として、[`<functional>`](/reference/functional.md)[`std::copyable_function`](/reference/copyable_function.md.nolink)クラスを追加
- [`std::bind_front()`](/reference/functional/bind_front.md)[`std::bind_back()`](/reference/functional/bind_back.md.nolink)に、非型テンプレート引数として関数を指定するオーバーロードを追加
- 関連して、非型テンプレート引数の関数オブジェクトを反転させられるよう、[`not_fn()`](/reference/functional/not_fn.md)に非型テンプレート引数版のオーバーロードを追加


### 文字列
- [`<charconv>`](/reference/charconv.md)の変換結果[`std::to_chars_result`](/reference/charconv/to_chars_result.md)[`std::from_chars_result`](/reference/charconv/from_chars_result.md)に、変換が正しく完了したかを判定する`operator bool`を追加
- [`std::to_string()`](/reference/string/to_string.md)の仕様が`std::sprintf()`で説明されていたが、[`std::format()`](/reference/format/format.md)で定義するよう仕様を変更
- [`std::basic_istringstream`](/reference/sstream/basic_istringstream.md)および[`std::basic_ostringstream`](/reference/sstream/basic_ostringstream.md)のコンストラクタおよび`str()`メンバ関数に、[`std::basic_string_view`](/reference/string_view/basic_string_view.md)を受け取るオーバーロードを追加
- [`std::format()`](/reference/format/format.md)に、ポインタ出力のサポートを追加
- [`std::format()`](/reference/format/format.md)で幅と精度を動的に指定した場合でも型の検証がコンパイル時に行われるよう仕様を見直し


### ファイル
- ファイルのネイティブハンドルを取得できるよう、[`std::basic_filebuf`](/reference/fstream/basic_filebuf.md)[`std::basic_ifstream`](/reference/fstream/basic_ifstream.md)[`std::basic_ofstream`](/reference/fstream/basic_ofstream.md)[`std::basic_fstream`](/reference/fstream/basic_fstream.md)クラスに、以下のメンバを追加
- `native_handle_type`
- `native_handle()`


### 並行・並列処理
- [`std::atomic`](/reference/atomic/atomic.md)オブジェクトに対する2つの値の最大値・最小値を取得する関数として、メンバ関数[`fetch_max()`](/reference/atomic/atomic/fetch_max.md.nolink)[`fetch_min()`](/reference/atomic/atomic/fetch_min.md.nolink)、非メンバ関数として[`std::atomic_fetch_max`](/reference/atomic/atomic_fetch_max.md.nolink)[`std::atomic_fetch_max_explicit`](/reference/atomic/atomic_fetch_max_explicit.md.nolink)[`std::atomic_fetch_min`](/reference/atomic/atomic_fetch_min.md.nolink)[`std::atomic_fetch_min_explicit`](/reference/atomic/atomic_fetch_min_explicit.md.nolink)を追加


### スマートポインタ
- [`std::weak_ptr`](/reference/memory/weak_ptr.md)を非順序連想コンテナのキーとして使用できるよう、[`<memory>`](/reference/memory.md)に所有権ベースのハッシュ値を取得する関数オブジェクト[`std::owner_hash`](/reference/memory/owner_hash.md.nolink)、および所有権ベースの等値比較を行う関数オブジェクト[`std::owner_equal`](/reference/memory/owner_equal.md.nolink)を追加
- 関連して、[`std::shared_ptr`](/reference/memory/shared_ptr.md)クラスと[`std::weak_ptr`](/reference/memory/weak_ptr.md)クラスのメンバ関数として、`owner_hash()``owner_equal()`を追加


### 日付・時間
Expand All @@ -80,3 +137,70 @@ C++26とは、2026年中に改訂される予定の、C++バージョンの通
- [`std::chrono::zoned_time`](/reference/chrono/zoned_time.md)
- [`std::chrono::leap_second`](/reference/chrono/leap_second.md)


### 数学
- [`<cmath>`](/reference/cmath.md)の以下の関数を、`constexpr`に対応
- [`std::cos()`](/reference/cmath/cos.md)
- [`std::sin()`](/reference/cmath/sin.md)
- [`std::tan()`](/reference/cmath/tan.md)
- [`std::cosh()`](/reference/cmath/cosh.md)
- [`std::sinh()`](/reference/cmath/sinh.md)
- [`std::tanh()`](/reference/cmath/tanh.md)
- [`std::acos()`](/reference/cmath/acos.md)
- [`std::asin()`](/reference/cmath/asin.md)
- [`std::atan()`](/reference/cmath/atan.md)
- [`std::atan2()`](/reference/cmath/atan2.md)
- [`std::acosh()`](/reference/cmath/acosh.md)
- [`std::asinh()`](/reference/cmath/asinh.md)
- [`std::atanh()`](/reference/cmath/atanh.md)
- [`std::exp()`](/reference/cmath/exp.md)
- [`std::exp2()`](/reference/cmath/exp2.md)
- [`std::expm1()`](/reference/cmath/expm1.md)
- [`std::log()`](/reference/cmath/log.md)
- [`std::log10()`](/reference/cmath/log10.md)
- [`std::log1p()`](/reference/cmath/log1p.md)
- [`std::log2()`](/reference/cmath/log2.md)
- [`std::pow()`](/reference/cmath/pow.md)
- [`std::sqrt()`](/reference/cmath/sqrt.md)
- [`std::cbrt()`](/reference/cmath/cbrt.md)
- [`std::hypot()`](/reference/cmath/hypot.md)
- [`std::erf()`](/reference/cmath/erf.md)
- [`std::erfc()`](/reference/cmath/erfc.md)
- [`std::lgamma()`](/reference/cmath/lgamma.md)
- [`std::tgamma()`](/reference/cmath/tgamma.md)
- [`<complex>`](/reference/complex.md)の以下の関数を、`constexpr`に対応
- [`std::abs()`](/reference/complex/complex/abs.md)
- [`std::arg()`](/reference/complex/complex/arg.md)
- [`std::proj()`](/reference/complex/complex/proj.md)
- [`std::polar()`](/reference/complex/complex/polar.md)
- [`std::cos()`](/reference/complex/complex/cos.md)
- [`std::sin()`](/reference/complex/complex/sin.md)
- [`std::tan()`](/reference/complex/complex/tan.md)
- [`std::cosh()`](/reference/complex/complex/cosh.md)
- [`std::sinh()`](/reference/complex/complex/sinh.md)
- [`std::tanh()`](/reference/complex/complex/tanh.md)
- [`std::acos()`](/reference/complex/complex/acos.md)
- [`std::asin()`](/reference/complex/complex/asin.md)
- [`std::atan()`](/reference/complex/complex/atan.md)
- [`std::acosh()`](/reference/complex/complex/acosh.md)
- [`std::asinh()`](/reference/complex/complex/asinh.md)
- [`std::atanh()`](/reference/complex/complex/atanh.md)
- [`std::exp()`](/reference/complex/complex/exp.md)
- [`std::log()`](/reference/complex/complex/log.md)
- [`std::log10()`](/reference/complex/complex/log10.md)
- [`std::pow()`](/reference/complex/complex/pow.md)
- [`std::sqrt()`](/reference/complex/complex/sqrt.md)

### ユーティリティ
- [`std::variant`](/reference/variant/variant.md)クラスに、メンバ関数版の[`visit()`](/reference/variant/variant/visit.md.nolink)を追加
- [`<ratio>`](/reference/ratio.md)に、新たなSI接頭辞として、以下を追加
- [`ronna`](/reference/ratio/si_prefix.md) (10<sup>27</sup>)
- [`ronto`](/reference/ratio/si_prefix.md) (10<sup>−27</sup>)
- [`quetta`](/reference/ratio/si_prefix.md) (10<sup>30</sup>)
- [`quecto`](/reference/ratio/si_prefix.md) (10<sup>−30</sup>)


### 型特性
- 共用体のどのメンバがアクティブかを判定するための関数として、[`<type_traits>`](/reference/type_traits.md)[`std::is_within_lifetime()`](/reference/type_traits/is_within_lifetime.md.nolink)を追加
- [`std::bitset`](/reference/bitset/bitset.md)に、[`std::basic_string_view`](/reference/string_view/basic_string_view.md)を受け取るコンストラクタを追加

3 changes: 3 additions & 0 deletions reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
| ヘッダ | 説明 | 対応バージョン |
|--------------------------------------|----------------------|----------------|
| [`<locale>`](/reference/locale.md) | ロケール | |
| [`<text_encoding>`](/reference/text_encoding.md.nolink) | 文字列エンコーディングの識別 | C++26 |
| [`<codecvt>`](/reference/codecvt.md) | コード変換ファセット | C++11<br/> C++17から非推奨 |


Expand Down Expand Up @@ -196,6 +197,8 @@
| [`<latch>`](/reference/latch.md) | ラッチ同期 | C++20 |
| [`<barrier>`](/reference/barrier.md) | バリア同期 | C++20 |
| [`<future>`](/reference/future.md) | Future | C++11 |
| [`<rcu>`](/reference/rcu.md.nolink) | データの参照・更新 | C++26 |
| [`<hazard_pointer>`](/reference/hazard_pointer.md.nolink) | ハザードポインタ | C++26 |


## <a id="clib-facilities" href="#clib-facilities">C言語互換ライブラリ</a>
Expand Down

0 comments on commit db656f4

Please sign in to comment.