diff --git a/README.md b/README.md index 8cdf14c..1579957 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ コントリビューションが採用された方は、[コントリビュータ](https://cppmap.github.io/contribution/contributors/)として Web サイトに名前を掲載します。 ## ビルド方法 + +### MKDocs のインストール + MkDocs を使います。 Python 3 をインストールし、MkDocs と MkDocs Material テーマ、`fontawesome_markdown` をインストールするために、以下のコマンドを実行します。 ``` @@ -23,8 +26,13 @@ pip install mkdocs pip install mkdocs-material pip install fontawesome_markdown ``` + +### ビルド + `mkdocs.yml` があるプロジェクトフォルダに移動し、以下のコマンドを実行すると Web サイトをビルドできます。 ``` mkdocs build ``` ビルドされた Web サイトは `../cppmap.github.io` ディレクトリに保存されます。 + + diff --git a/docs/articles/acronyms.md b/docs/articles/acronyms.md new file mode 100644 index 0000000..a8998b6 --- /dev/null +++ b/docs/articles/acronyms.md @@ -0,0 +1,301 @@ +description: C++ 関連の略語の紹介 + +# C++ 関連の略語 + +### ABI | Application Binary Interface +アプリケーション・バイナリ・インタフェース + +### ACCU | Association of C and C++ Users +C および C++ ユーザ協会。[年次カンファレンス](https://conference.accu.org/) の開催や「[Overload](https://accu.org/index.php/journals/c78/)」の刊行などを行う。 + +### ADL | Argument Dependent Lookup +実引数依存の名前検索 + +### ANSI | American National Standards Institute +米国国家規格協会 + +### API | Application Programming Interface +アプリケーション・プログラミング・インタフェース + +### ASan | AddressSanitizer +メモリ関連のエラーを検出する動的解析ツール + +### BCC | Borland C++ Compiler +現在の Embarcadero C++ Builder の前身。2000 年にリリースされた Borland C++ Compiler 5.5 は、当時はめずらしい無償の C++ コンパイラとして、広く使われた。 + +### BCPL | Basic Combined Programming Language +1966 年にマーティン・リチャーズが設計したプログラミング言語。C 言語や C++ に影響を与えた。 + +### BMI | Binary Module Interface +コンパイラがモジュールファイルをコンパイルして生成する中間ファイル。GCC では CMI (Compiled Module Interfaces) と呼ぶ + +### C++ AMP | C++ Accelerated Massive Parallelism +マイクロソフトなどが開発を進めている、並列計算のための言語拡張機能とライブラリ + +### CD | Committee Draft +規格の委員会原案 + +### COW | Copy On Write +コピーオンライトと呼ばれる最適化テクニック + +### CPO | Customization point object +C++20 以降の標準ライブラリで提供される、カスタマイゼーションポイントオブジェクトと呼ばれる関数オブジェクト([参考記事](https://onihusube.hatenablog.com/entry/2020/06/26/225920)) + +### CPP | C Preprocessor +マクロを処理するプリプロセッサ + +### CRTP | Curiously Recurring Template Pattern +奇妙に再帰したテンプレートパターン + +### CTAD | Class Template Argument Deduction +クラステンプレートのテンプレート引数推論 + +### CTRE | Compile Time Regular Expressions +コンパイル時正規表現 + +### CWG | Core Working Group +C++ 標準化委員会のワーキンググループの 1 つ。言語機能に関する規格文面をレビューする。 + +### deque | double-ended queue +両端キュー + +### D&E | The Design and Evolution of C++ +Bjarne Stroustrup による C++ の設計と歴史の解説書。1994 年に発売。 + +### DIS | Draft International Standard +国際規格案 + +### DR | Defect Report +規格の欠陥の報告 + +### EBO | Empty Base Optimization +空の基底クラスの最適化 + +### EDG | Edison Design Group +企業名。C/C++ コンパイラフロントエンドを開発する。[Edison Design Group](https://www.edg.com/company) + +### EMC++ | Effective Modern C++ +Scott Meyers による C++11/14 の解説書 + +### EOF | End-of-File +ファイルの終端 + +### EWG | Evolution Working Group +C++ 標準化委員会のワーキンググループの 1 つ。言語機能の設計をする。 + +### EWGI | Evolution Working Group Incubator +C++ 標準化委員会のスタディグループの 1 つ (SG17). EWG に向けた提案の評価をする。 + +### FCD | Final Committee Draft +規格の最終委員会原案 + +### FDIS | Final Draft International Standard +最終国際規格案 + +### FIFO | First in, first out +`std::queue` のように、最初に追加した要素から順番に取り出していくデータ構造や手順 + +### GCC | GNU Compiler Collection / GNU C++ Compiler +GNU コンパイラコレクション、またはその C++ コンパイラ + +### GMF | Global Module Fragment +グローバルモジュールフラグメント + +### G++ | GNU C++ Compiler +GNU コンパイラコレクションの C++ コンパイラ + +### ICE | Internal Compiler Error +コンパイラ内部エラー + +### IDE | Integrated Development Enviornment +統合開発環境 + +### IEC | International Electronics Commission +国際電気標準会議 + +### I/O | Input/Output +入出力 + +### IS | International Standard +国際規格 + +### ISO | International Organization for Standardization +国際標準化機構 + +### K&R | Kernighan and Ritchie's +ブライアン・カーニハンとデニス・リッチーによる著書「プログラミング言語 C」の俗称。書中で使われている字下げスタイルが「K&R スタイル」と呼ばれる。 + +### LEWG | Library Evolution Working Group +C++ 標準化委員会のワーキンググループの 1 つ。標準ライブラリの設計をする。 + +### LEWGI | Library Evolution Working Group Incubator +C++ 標準化委員会のスタディグループの 1 つ (SG18). LEWG に向けた提案の評価をする。 + +### LHS | left-hand side +式の左辺 + +### LIFO | Last-in, first-out +`std::stack` のように、最も新しく追加された要素から、入れたのとは逆順で取り出していくデータ構造や手順 + +### LTO | Link Time Optimization +リンク時最適化 + +### LWG | Library Working Group +C++ 標準化委員会のワーキンググループの 1 つ。標準ライブラリに関する規格文面をレビューする。 + +### MSVC | Microsoft Visual C++ +Microsoft Visual Studio の C++ コンパイラ + +### NaN | Not a Number +浮動小数点数で使われる非数の表現 + +### NB | National Body +標準化委員会の各国支部 + +### NDR | No Diagnostic Required +C++ の言語仕様には沿っていないが、コンパイル時間の短縮のためにコンパイラはメッセージを出力しなくてもよいとされている違反 + +### NRVO | Named Return Value Optimization +名前付き戻り値の最適化 + +### NSDMI | Non-Static Data Member Initializers +非静的メンバの初期化 + +### NTBS | Null-terminated Byte Strings +ヌル文字で終了する、各文字が 1 バイトで表現される文字配列 + +### NTMBS | Null-terminated Multibyte Strings +ヌル文字で終了する、各文字がマルチバイトで表現されることがある文字配列 + +### NTTP | Non-Type Template Parameter +非型テンプレート・パラメータ + +### NVI | Non-Virtual Interface +非仮想インターフェース。C++ のプログラミングテクニック + +### ODR | One Definition Rule +C++ の設計コンセプトの 1 つ。あらゆる型や関数、テンプレートは複数の定義を持てないというルール + +### OOD | Object Oriented Design +オブジェクト指向設計 + +### OOP | Object Oriented Programming +オブジェクト指向プログラミング + +### OOPL | Object Oriented Programing Language +オブジェクト指向プログラミング言語 + +### PCH | Precompiled Header +プリコンパイル済みヘッダ + +### PGO | Profile-guided Optimization +プロファイリングによる最適化 + +### PImpl | Pointer to Implementation +クラスの実装の詳細を隠す、C++ のプログラミングテクニック + +### PMF | Pointer to Member Function +メンバ関数へのポインタ + +### POD | Plain Old Data +C 言語と互換性のあるオブジェクトレイアウトを持つ型 + +### RAII | Resource Allocation Is Initialization +「リソース取得は初期化である」という C++ のプログラミングテクニック + +### RHS | right-hand side +式の右辺 + +### RTTI | Run-Time Type Information +実行時型情報 + +### RVO | Return Value Optimization +戻り値の最適化 + +### SBO | Small Buffer Optimization +小さい動的配列でのメモリアロケーションを避ける C++ の最適化テクニック + +### SD | Standing Document +標準化委員会の常備文書 (https://isocpp.org/std/standing-documents) + +### SEH | Structured Exception Handling +構造化例外処理。Windows で使われる独自の例外処理。 + +### SFINAE | Substitution Failure Is Not An Error +テンプレートプログラミングのテクニックの 1 つ + +### SG | Study Group +特定のテーマについて議論する、C++ 標準化委員会のサブグループ + +### SIMD | Single Instruction Multiple Data +並列処理の分類の 1 つで、1 つの命令による操作を複数のデータに対して同時に行うもの + +### SOO | Small Object Optimization +小さなオブジェクトに対するメモリアロケーションを避ける C++ の最適化テクニック + +### SSO | Small String Optimization +短い文字列でのメモリアロケーションを避ける C++ の最適化テクニック + +### STL | Standard Template Library +アレクサンダー・ステパノフらによって設計された標準テンプレートライブラリ。のちに C++ の標準ライブラリの一部となった。現在では C++ 標準ライブラリ全般を指して STL と呼ぶこともある。 + +### T | Type +`template ` のように、テンプレート引数でよく使われる名前。テンプレート引数がさらに登場する場合には、アルファベット順で次に来る `U` が使われることがある。 + +### TC++PL | The C++ Programming Language +Bjarne Stroustrup による C++ 解説書シリーズの 1 つ。プログラマ向け。2013 年の第 4 版が最新。 + +### TLS | Thread Local Storage +スレッド局所記憶 + +### TMP | Template Meta Programming +テンプレートメタプログラミング + +### TR | Technical Report +実験的な C++ の機能に関する報告書、現在は TS に移行 + +### TS | Technical Specification +実験的な C++ の機能に関する仕様書 + +### TU | Translation Unit +翻訳単位 + +### UB | Undefined Behavior +未定義動作 + +### UCN | Universal Character Name +ユニバーサル文字名。`char32_t s = U'\U0001F60E';` のように、文字・文字列リテラルにおいて Unicode コードポイントにより表された文字 + +### UDL | User-Defined Literals +ユーザ定義リテラル + +### URBG | Uniform Random Bit Generator +一様ランダムビット生成器。C++14 までは URNG (Uniform Random Number Generator) という語を使用していた。 + +### VLA | Variable Length Array +可変長配列。GCC が拡張機能としてサポートし、C99 では正式に採用されているが、C++ 標準ではサポートしない。 + +### VLAIS | Variable Length Array In Structure +構造体内に可変長配列を宣言できる、GCC の拡張機能 + +### VMT | Virtual Method Table +仮想関数テーブル + +### WD | Working Draft +規格の作業原案 + +### WG | Working Group +作業グループ + +## 参考文献 +- Acronyms | cppreference.com + https://en.cppreference.com/w/cpp/language/acronyms +- A C++ acronym glossary + https://quuxplusone.github.io/blog/2019/08/02/the-tough-guide-to-cpp-acronyms/ +- C++ 国際標準規格 | cpprefjp + https://cpprefjp.github.io/international-standard.html +- Bjarne Stroustrup's C++ Glossary + http://www.stroustrup.com/glossary.html#Gvirtual-function-table +- C++関連の略語 | Qiita + https://qiita.com/yohhoy/items/b3cb98d2bacd69085309 + diff --git a/docs/articles/comment-tricks.md b/docs/articles/comment-tricks.md index 24b2576..0f3d983 100644 --- a/docs/articles/comment-tricks.md +++ b/docs/articles/comment-tricks.md @@ -8,132 +8,237 @@ description: C++ のプログラムで使えるコメントアウトのトリッ ## 範囲の ON・OFF スラッシュ `/` の有無に応じて、範囲コメントの有効・無効を切り替えます。 -``` C++ tab="無効" -#include +#### パターン 1 -int main() -{ - /**/ - int x; +=== "無効" - std::cin >> x; + ``` C++ + #include - std::cout << x * x; - /**/ -} -``` + int main() + { + /**/ + int x; -``` C++ tab="有効" -#include + std::cin >> x; -int main() -{ - /** - int x; + std::cout << x * x; + /**/ + } + ``` - std::cin >> x; +=== "有効" - std::cout << x * x; - /**/ -} -``` + ``` C++ + #include + + int main() + { + /** + int x; + + std::cin >> x; + + std::cout << x * x; + /**/ + } + ``` + +#### パターン 2 + +=== "無効" + + ``` C++ + #include + + int main() + { + //* + int x; + + std::cin >> x; + + std::cout << x * x; + //*/ + } + ``` + +=== "有効" + + ``` C++ + #include + + int main() + { + /* + int x; + + std::cin >> x; + + std::cout << x * x; + //*/ + } + ``` ## 値の切り替え スラッシュ `/` の有無に応じて、左右どちらかの値を選択します。 -``` C++ tab="左" -#include +=== "左" + + ``` C++ + #include -int main() -{ - constexpr int N = /**/ 100 /*/ 200 /**/; + int main() + { + constexpr int N = /**/ 100 /*/ 200 /**/; - std::cout << N << '\n'; -} -``` + std::cout << N << '\n'; + } + ``` -``` C++ tab="右" -#include +=== "右" -int main() -{ - constexpr int N = /** 100 /*/ 200 /**/; + ``` C++ + #include - std::cout << N << '\n'; -} -``` + int main() + { + constexpr int N = /** 100 /*/ 200 /**/; + + std::cout << N << '\n'; + } + ``` ## 範囲の切り替え 値の切り替えの範囲版です。 スラッシュ / の有無に応じて、前半、後半どちらかの範囲を選択します。 -``` C++ tab="前半" -#include +#### パターン 1 + +=== "前半" + + ``` C++ + #include + + int main() + { + /**/ + int x; + + std::cin >> x; -int main() -{ - /**/ - int x; + std::cout << x * x; + /*/ + int x, y; - std::cin >> x; + std::cin >> x >> y; - std::cout << x * x; - /*/ - int x, y; + std::cout << x + y; + /**/ + } + ``` - std::cin >> x >> y; +=== "後半" - std::cout << x + y; - /**/ -} -``` + ``` C++ + #include -``` C++ tab="後半" -#include + int main() + { + /** + int x; -int main() -{ - /** - int x; + std::cin >> x; - std::cin >> x; + std::cout << x * x; + /*/ + int x, y; - std::cout << x * x; - /*/ - int x, y; + std::cin >> x >> y; - std::cin >> x >> y; + std::cout << x + y; + /**/ + } + ``` + +#### パターン 2 + +=== "前半" + + ``` C++ + #include + + int main() + { + //* + int x; + + std::cin >> x; + + std::cout << x * x; + /*/ + int x, y; + + std::cin >> x >> y; + + std::cout << x + y; + //*/ + } + ``` + +=== "後半" + + ``` C++ + #include + + int main() + { + /* + int x; + + std::cin >> x; + + std::cout << x * x; + /*/ + int x, y; + + std::cin >> x >> y; + + std::cout << x + y; + //*/ + } + ``` - std::cout << x + y; - /**/ -} -``` ## 行の入れ替えの防止 リファクタリング時に、コピー&ペーストで行の順番を入れ替えてしまうことを防ぎます。 -``` C++ tab="基本のコード" -void First() {} -void Second() {} - -int main() -{ - First();/* - */Second(); -} -``` - -``` C++ tab="入れ替えるとエラー" -void First() {} -void Second() {} - -int main() -{ - */ Second(); - First();/* -} -``` +=== "元のコード" + + ``` C++ + void First() {} + void Second() {} + + int main() + { + First();/* + */Second(); + } + ``` + +=== "入れ替えるとエラー" + + ``` C++ + void First() {} + void Second() {} + + int main() + { + */ Second(); + First();/* + } + ``` diff --git a/docs/articles/it-compiles.md b/docs/articles/it-compiles.md index 1c3e91a..10a5bf6 100644 --- a/docs/articles/it-compiles.md +++ b/docs/articles/it-compiles.md @@ -51,6 +51,14 @@ int main() []{}; [](){}; [](){}(); + [[]][]{}; + []()[[]]{}; + [[]][]{}(); + [[]][](){}; + []()[[]]{}(); + [[]][](){}(); + [[]][]()[[]]{}; + [[]][]()[[]]{}(); } ``` @@ -143,3 +151,59 @@ int main() A::A::A::A::A::A::f(); } ``` + +## 続 +```C++ +struct S +{ + static const int i = 42; +}; + +int main() +{ + return S::S::S::S::S::S::i; +} +``` + +## `typedef` の場所 1 +```C++ +long unsigned typedef int long Uint64; + +int main() +{ + Uint64 i = 123ull; +} +``` + +## `typedef` の場所 2 +```C++ +int main() +{ + if (typedef int Int; true) + { + Int a = 0; + } + + switch (typedef int Int; 0) + { + case 0: + Int a = 0; + break; + } +} +``` + +## `+` と `-` +```C++ +#include + +int main() +{ + int a = 0 +-+-+-+-+-+-+-+-+ 1 +-+-+-+-+-+-+-+-+ 2; + int b = 0 + + + + + + + + + 1 - - - - - - - - - 2; + + std::cout << a << '\n'; + std::cout << b << '\n'; +} +``` + diff --git a/docs/articles/it-does-not-compile.md b/docs/articles/it-does-not-compile.md index 80ec232..5cf778c 100644 --- a/docs/articles/it-does-not-compile.md +++ b/docs/articles/it-does-not-compile.md @@ -4,7 +4,7 @@ description: 正しいように見えて、コンパイルエラーになる C++ 正しいように見えて、コンパイルエラーになるコードの紹介です。 -## 添字とラムダ式 +## [添字とラムダ式](https://wandbox.org/permlink/SVY9fqkBjRUSUNJQ) ```C++ #include @@ -16,7 +16,7 @@ int main() } ``` -## 使えない変数 +## [使えない変数](https://wandbox.org/permlink/HJHm8EKL6Ma73jyR) ```C++ #include @@ -28,7 +28,7 @@ int main() } ``` -## ポインタ型のデフォルト引数 +## [ポインタ型のデフォルト引数](https://wandbox.org/permlink/RiDJ2HEPG9zL0KH8) ```C++ void Func(int*=nullptr) { @@ -39,4 +39,35 @@ int main() { Func(); } -``` \ No newline at end of file +``` + +## [関数のオーバーロード](https://wandbox.org/permlink/dTWsrIqVeuJRifdK) +```C++ +#include + +using T = int&; + +void f(T&) +{ + std::cout << "A\n"; +} + +void f(const T&) +{ + std::cout << "B\n"; +} + +int main() +{ + int x; + f(x); +} +``` + +## [0xe](https://wandbox.org/permlink/aYCRa87L7rhq5Ydt) +```C++ +int main() +{ + return 0xe-0xe; +} +``` diff --git a/docs/articles/member-access.md b/docs/articles/member-access.md new file mode 100644 index 0000000..4bb8f6c --- /dev/null +++ b/docs/articles/member-access.md @@ -0,0 +1,5 @@ +description: C++ アクセス指定子の効果 + +# C++ アクセス指定子の効果 + + diff --git a/docs/articles/type-traits.md b/docs/articles/type-traits.md new file mode 100644 index 0000000..371b5a9 --- /dev/null +++ b/docs/articles/type-traits.md @@ -0,0 +1,8 @@ +description: C++ 型特性の早見表 + +# C++ 型特性 早見表 + + + + + diff --git a/docs/contribution/contributors.md b/docs/contribution/contributors.md index 2139c74..e553cdc 100644 --- a/docs/contribution/contributors.md +++ b/docs/contribution/contributors.md @@ -8,17 +8,52 @@ C++ の歩き方 Web サイトの改善、情報拡充に協力してくれた - [@cpp_akira](https://twitter.com/cpp_akira) さん - [オンライン資料 情報提供](https://github.com/cppmap/cppmap.docs/pull/16) + - [国内の勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/24) + - [国内の勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/30) + - [国内の勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/33) + - [C++ 関連の略語 情報提供](https://github.com/cppmap/cppmap.docs/issues/41) + - [C++ 標準ライブラリ 記事加筆](https://github.com/cppmap/cppmap.docs/pull/45) - [@Fuyutsubaki](https://twitter.com/Fuyutsubaki) さん - [なぜかコンパイルできない ネタ提供](https://github.com/cppmap/cppmap.docs/issues/9#issuecomment-472076826) - [標準ライブラリ 記事作成](https://github.com/cppmap/cppmap.docs/pull/12) +- [@hr_sao](https://twitter.com/hr_sao) さん + - [C++ コードフォーマッタ 記事加筆](https://github.com/cppmap/cppmap.docs/pull/36) + - [gitignore テンプレ記事提供](https://github.com/cppmap/cppmap.docs/pull/48) + - [C++ 技術同人誌 情報提供](https://github.com/cppmap/cppmap.docs/pull/51) - [@kariya_mitsuru](https://twitter.com/kariya_mitsuru) さん - [C++17 洋書 情報提供](https://github.com/cppmap/cppmap.docs/issues/6) - [処理系の対応状況 情報提供](https://github.com/cppmap/cppmap.docs/pull/7) - [IEEE 754 演算について 情報提供](https://twitter.com/kariya_mitsuru/status/1148972200713584640) -- [@matken11235](https://twitter.com/matken11235) さん + - [なぜかコンパイルできる 情報提供](https://twitter.com/kariya_mitsuru/status/1369276950972309509) + - [なぜかコンパイルできない 情報提供](https://twitter.com/kariya_mitsuru/status/1369294046456332296) +- [@kenichiuda](https://twitter.com/kenichiuda) + - [C++ 関連の略語 情報提供](https://github.com/cppmap/cppmap.docs/issues/41#issuecomment-693335310) + - [C++ 関連の略語 情報提供](https://github.com/cppmap/cppmap.docs/issues/41#issuecomment-855238514) +- [@Linda_pp](https://twitter.com/Linda_pp) さん + - [ライブラリ 記事提供](https://github.com/cppmap/cppmap.docs/pull/22) +- [@mafafa_ese](https://twitter.com/mafafa_ese) さん + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/53) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/54) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/55) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/56) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/57) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/58) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/59) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/60) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/61) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/62) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/63) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/64) + - [国内の C++ 勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/65) +- [@_matken](https://twitter.com/_matken) さん - [C++ パッケージマネージャ 情報提供](https://github.com/cppmap/cppmap.docs/pull/2) + - [C++ リンター 情報提供](https://github.com/cppmap/cppmap.docs/pull/50) +- [@monman53](https://twitter.com/monman53) さん + - [ページの修正](https://github.com/cppmap/cppmap.docs/pull/46) - [@nekko1119](https://twitter.com/nekko1119) さん - [予約語 記事作成](https://github.com/cppmap/cppmap.docs/pull/11) +- [@nicklegr](https://twitter.com/nicklegr) さん + - [記事の修正](https://github.com/cppmap/cppmap.docs/pull/52) - [@NxNeu_J](https://twitter.com/NxNeu_J) さん - [C++17 洋書 情報提供](https://github.com/cppmap/cppmap.docs/issues/5) - [@onihusube9](https://twitter.com/onihusube9) さん @@ -29,11 +64,44 @@ C++ の歩き方 Web サイトの改善、情報拡充に協力してくれた - [標準化会議 記事加筆](https://github.com/cppmap/cppmap.docs/pull/19) - [C++20 の新機能 記事加筆](https://github.com/cppmap/cppmap.docs/pull/20) - [標準化会議 記事加筆](https://github.com/cppmap/cppmap.docs/pull/21) + - [標準化会議 記事加筆](https://github.com/cppmap/cppmap.docs/pull/27) + - [標準ライブラリ 執筆協力](https://github.com/cppmap/cppmap.docs/issues/28) + - [標準ライブラリ 記事加筆](https://github.com/cppmap/cppmap.docs/issues/31) + - [標準ライブラリ 記事更新](https://github.com/cppmap/cppmap.docs/pull/34) + - [C++ 書籍 記事加筆](https://github.com/cppmap/cppmap.docs/pull/37) + - [標準化会議 情報提供](https://twitter.com/onihusube9/status/1267252027999973376) + - [C++ ブログ集 情報提供](https://github.com/cppmap/cppmap.docs/issues/42) +- [@Ryoga_exe](https://twitter.com/Ryoga_exe) さん + - [なぜかコンパイルできる 情報提供](https://github.com/cppmap/cppmap.docs/issues/9#issuecomment-792805225) +- [@ryutorion](https://twitter.com/ryutorion) さん + - [C++ 洋書 情報提供](https://twitter.com/ryutorion/status/1333744787136991234) +- [@tak0kada](https://twitter.com/tak0kada) さん + - [国内の勉強会 記事加筆](https://github.com/cppmap/cppmap.docs/pull/26) - [@tetzrom](https://twitter.com/tetzrom) さん - [オンライン資料 情報提供](https://github.com/cppmap/cppmap.docs/pull/15) +- [@TKinugasa](https://twitter.com/TKinugasa) + - [C++ 関連の略語 情報提供](https://twitter.com/TKinugasa/status/1306694400215449600) +- [@ToruNiina](https://twitter.com/ToruNiina) さん + - [C++ ブログ集 情報提供](https://github.com/cppmap/cppmap.docs/issues/42) +- [@wolf_cpp](https://twitter.com/wolf_cpp) さん + - [国内の勉強会 情報提供](https://github.com/cppmap/cppmap.docs/pull/25) - [@wx257osn2](https://twitter.com/wx257osn2) さん - [オンラインコンパイラ 情報提供](https://github.com/cppmap/cppmap.docs/pull/18) +- [@yaito3014](https://twitter.com/yaito3014) さん + - [なぜかコンパイルできない 情報提供](https://github.com/cppmap/cppmap.docs/issues/9#issuecomment-792238518) - [@yohhoy](https://twitter.com/yohhoy) さん - [記事改善案 提供](https://twitter.com/yohhoy/status/1106950996192747521) + - [C++23 以降に向けた提案 情報提供](https://github.com/cppmap/cppmap.docs/pull/32) + - [C++ 規格書 記事更新](https://github.com/cppmap/cppmap.docs/pull/38) + - [C++ 関連の略語 情報提供](https://github.com/cppmap/cppmap.docs/issues/41) + - [なぜかコンパイルできる 情報提供](https://github.com/cppmap/cppmap.docs/issues/9#issuecomment-791437878) + - [C++ 関連の略語 情報提供](https://github.com/cppmap/cppmap.docs/issues/41#issuecomment-855401574) +- [@yuji_n_dispair](https://twitter.com/yuji_n_dispair) さん + - [国内の勉強会 情報加筆](https://github.com/cppmap/cppmap.docs/pull/29) - [@yumetodo](https://twitter.com/yumetodo) さん - - [テキストデータ ライブラリ 情報提供](https://github.com/cppmap/cppmap.docs/pull/17) \ No newline at end of file + - [テキストデータ ライブラリ 情報提供](https://github.com/cppmap/cppmap.docs/pull/17) + - [並行・並列 ライブラリ 記事加筆](https://github.com/cppmap/cppmap.docs/pull/40) + - [C++ 関連の略語 情報提供](https://github.com/cppmap/cppmap.docs/issues/41) + - [テキストデータ ライブラリ 情報提供](https://github.com/cppmap/cppmap.docs/pull/44) + + \ No newline at end of file diff --git a/docs/cppmap_styles.css b/docs/cppmap_styles.css index 65d0525..d04ae84 100644 Binary files a/docs/cppmap_styles.css and b/docs/cppmap_styles.css differ diff --git a/docs/images/donut_small-white-24dp.svg b/docs/images/donut_small-white-24dp.svg new file mode 100644 index 0000000..67b322b --- /dev/null +++ b/docs/images/donut_small-white-24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/logo.png b/docs/images/logo.png new file mode 100644 index 0000000..43afb4d Binary files /dev/null and b/docs/images/logo.png differ diff --git a/docs/index.md b/docs/index.md index 61dd7b4..c50c178 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,18 +1,48 @@ -# C++ の歩き方 | CppMap +# C++ の歩き方 | cppmap -``` c++ -#include +📢 CEDEC 2024 にて講演を行いました。発表資料を公開しています。 + +- [CEDEC 2024 | ゲーム開発者のための C++17~C++23, 近年の C++ 規格策定の動向 :material-open-in-new:](https://www.docswell.com/s/cpp/5XEY92-cedec2024){:target="_blank"} + +📢 CEDEC 2020 にて講演を行いました。発表資料を公開しています。 + +- [CEDEC 2020 | ゲーム開発者のための C++11~C++20, 将来の C++ の展望 :material-open-in-new:](https://speakerdeck.com/cpp/cedec2020){:target="_blank"} + +📢 コンテンツ拡充のため【募集】タグのスレッドへ情報をお寄せください。 + +- [cppmap.docs | Issues :material-open-in-new:](https://github.com/cppmap/cppmap.docs/issues){:target="_blank"} + +📢 本サイトの運営は、GitHub Sponsors によって支えられています。 + +- [GitHub Sponsors | Become a sponsor to Reputeless :material-open-in-new:](https://github.com/sponsors/Reputeless){:target="_blank"} -int main() -{ - std::cout << "Hello, CppMap!\n"; -} -``` ## このサイトについて -C++17, C++20, C++23, C++26 に関する情報を調査・提供します。 +C++17, C++20, C++23, C++26 に関する情報を調査・提供します。 +管理者 @Reputeless と、コントリビュータの皆様 によって執筆されています。 + +- [コントリビュート方法](https://github.com/cppmap/cppmap.docs) + ## ライセンス -CC0 本サイトの記事とサンプルコードはパブリックドメインです。 サードパーティーのコンテンツの著作権は、それぞれの所有者に帰属します。 + +CC0 + + +## GitHub Sponsors + +#### Gold Sponsor +- [TOMOAKI12345](https://github.com/TOMOAKI12345){:target="_blank"} +- [CubeSoft, Inc.](https://www.cube-soft.jp/){:target="_blank"} +- [おおやま](https://www.ise.ous.ac.jp/laboratory/t-oyama.html){:target="_blank"} + +#### Silver Sponsor +- [sknjpn](https://x.com/sknjpn){:target="_blank"} +- 野菜ジュース +- [kagamiz](https://github.com/kagamiz){:target="_blank"} +- [ysaito](https://x.com/ysaito8015){:target="_blank"} + +#### Bronze Sponsor +アゲハマ, Fuyutsubaki, 😊, 🐝, jacking75, Chris Ohk, ShivAlley, lamuda, fal_rnd, As Project, nasatame, 🌶️, 緑獺おがめ diff --git a/docs/learn/blogs.md b/docs/learn/blogs.md new file mode 100644 index 0000000..d8a4dbc --- /dev/null +++ b/docs/learn/blogs.md @@ -0,0 +1,44 @@ +description: モダン C++ の学習に役立つ技術ブログ集の紹介 + +# C++ ブログ集 + +C++ の学習に役立つ技術ブログ集を紹介します。 + +## 日本語の C++ ブログ +- yohhoyの日記 https://yohhoy.hatenadiary.jp/ +- yohhoyの日記(別館) https://yohhoy.hatenablog.jp/ +- 地面を見下ろす少年の足蹴にされる私 https://onihusube.hatenablog.com/ +- Faith and Brave - C++で遊ぼう https://faithandbrave.hateblo.jp/ +- in neuro https://in-neuro.hatenablog.com/archive/category/C%2B%2B +- 本の虫 https://cpplover.blogspot.com/ +- C++ と色々 https://nekko1119.hatenablog.com/archive/category/C%2B%2B +- 賢朽脳瘏 https://kenkyu-note.hatenablog.com/archive/category/C%2B%2B +- Secret Garden(Instrumental) https://secret-garden.hatenablog.com/archive/category/C%2B%2B + +## 英語の C++ ブログ + +- Andrzej's C++ blog https://akrzemi1.wordpress.com/ +- Arthur O'Dwyer's blog https://quuxplusone.github.io/blog/ +- Barry Revzin’s blog https://brevzin.github.io/ +- Bartek's coding blog https://www.bfilipek.com/ +- C++ Team Blog https://devblogs.microsoft.com/cppblog/ +- cor3ntin's blog https://cor3ntin.github.io/ +- Daniel Lemire's blog https://lemire.me/blog/ +- Fluent C++ https://www.fluentcpp.com/ +- foonathan::​blog() https://foonathan.net/ +- Just Software Solutions (Anthony Williams's blog) https://www.justsoftwaresolutions.co.uk/blog/ +- Marius Bancila's Blog https://mariusbancila.ro/blog/ +- Mathieu Ropert's blog https://mropert.github.io/ +- Meeting C++ Brogroll https://www.meetingcpp.com/blog/blogroll/ +- Modernes C++ http://www.modernescpp.com/index.php +- Simplify C++! https://arne-mertz.de/ +- Sticky Bits https://blog.feabhas.com/category/programming/ +- Sutter’s Mill https://herbsutter.com/ +- The Pasture https://thephd.github.io/ +- There’s Waldo https://botondballo.wordpress.com/category/programming/c/ +- timur.audio https://timur.audio/ +- vector of bool https://vector-of-bool.github.io/ +- Vittorio Romeo's blog https://vittorioromeo.info/index.html +- Vorbrodt's C++ Blog https://vorbrodt.blog/ + +追加の提案は [Issue #42](https://github.com/cppmap/cppmap.docs/issues/42) までコメントをお願いします。 diff --git a/docs/learn/books.md b/docs/learn/books.md index fafe85c..86c8a57 100644 --- a/docs/learn/books.md +++ b/docs/learn/books.md @@ -1,34 +1,100 @@ description: モダン C++ の学習に役立つ書籍の紹介 -# 書籍 +# C++ 書籍 -C++ の学習に役立つ書籍を紹介します。 +C++ の学習に役立つ最新の書籍を紹介します。 +初学者向けの入門書には :fontawesome-solid-graduation-cap: マークを付けています。 - + -## C++14 以降の書籍 +## C++14 以降を扱った書籍 | 書名 | 発行年 | C++ 規格 | 内容 | |------------------------------------------------------------------------|------|----------|------------------------------------------------------------------------------------------------| | [Effective Modern C++](https://amzn.to/2H8bnnF) | 2015 | C++14 | Effective C++ で有名な Scott Meyers による C++11/14 のガイドライン・コーディングスタイル・イディオム集 | -| [C++11/14 コア言語](https://amzn.to/2HmyYQP) | 2015 | C++14 | C++11/14 の文法と言語機能を規格書に基づいて詳細に解説。[オープンソース版](https://github.com/EzoeRyou/cpp-book) | +| [C++11/14 コア言語](https://amzn.to/2HmyYQP) | 2015 | C++14 | C++11/14 の文法と言語機能を規格書に基づいて詳細に解説。[オープンソース版 :material-open-in-new:](https://github.com/EzoeRyou/cpp-book){:target="_blank"} | +| [組込みソフトウェア開発向けコーディング作法ガイド C++ 言語版 Ver.2.0](https://www.ipa.go.jp/publish/secbooks20161001.html) | 2016 | C++14 | 基礎を学んだ人向けのコーディングスタイル本。組み込み向けの厳格さもあるが概ね汎用的。PDF 版は無料公開 | | [C++ によるプログラミングの原則と実践](https://amzn.to/2Hmzazx) | 2016 | C++14 | C++ を使ってプログラミングを教える 1,000 ページ超の入門書。C++ 生みの親 Bjarne Stroustrup 著 | -| [基礎からしっかり学ぶ C++ の教科書](https://amzn.to/2IXa1hf) | 2017 | C++14 | :fa-graduation-cap: 初学者向け。基本的な文法からクラス、コンテナ、並列化まで扱う約 300 ページの入門書 | +| [基礎からしっかり学ぶ C++ の教科書](https://amzn.to/2IXa1hf) | 2017 | C++14 | C++ の基本的な文法からクラス、コンテナ、並列化など様々な機能を 300 ページに圧縮して紹介する入門書 | | [C++ の絵本 第2版](https://amzn.to/2TFvvTO) | 2017 | C++14 | クラスや参照、テンプレートなど、C に対する C++ 固有の言語機能を図版を用いて解説 | | [Optimized C++](https://amzn.to/2Ho1KjN) | 2017 | C++14 | C++ プログラムの性能測定と最適化についての実践と解説 | | [[改訂第3版] C++ ポケットリファレンス](https://amzn.to/2H8a3kH) | 2018 | C++17 | 基本文法の解説に加え、逆引き形式で標準ライブラリの幅広い機能を紹介 | -| [江添亮の詳説 C++17](https://amzn.to/2HmVw42) | 2018 | C++17 | C++14/17 の新しい文法と標準ライブラリ機能を詳細に解説。[オープンソース版](https://ezoeryou.github.io/cpp17book/) | -| [冒険で学ぶはじめてのプログラミング](https://amzn.to/2IWnWnx) | 2018 | C++17 | :fa-graduation-cap: 初学者向け。早稲田大学が運営する中学・高校生向け C++ 入門講座の教科書。[紹介ページ](https://enrect.org/cppbook/) | +| [江添亮の詳説 C++17](https://amzn.to/2HmVw42) | 2018 | C++17 | C++14/17 の新しい文法と標準ライブラリ機能を詳細に解説。[オープンソース版 :material-open-in-new:](https://ezoeryou.github.io/cpp17book/){:target="_blank"} | +| [冒険で学ぶはじめてのプログラミング](https://amzn.to/2IWnWnx) | 2018 | C++17 | :fontawesome-solid-graduation-cap: 未経験者向け。早稲田大学が運営する中学・高校生向け C++ 入門講座の教科書。[紹介ページ :material-open-in-new:](https://enrect.org/cppbook/){:target="_blank"} | | [Modern C++ チャレンジ ― C++17 プログラミング力を鍛える 100 問](https://amzn.to/2EMsIP8) | 2019 | C++17/20 | 現実的・実践的な 100 の課題を C++ で解決する問題集。オープンソースライブラリを積極的に活用する | +| [江添亮の C++ 入門](https://amzn.to/2HTGUbt) | 2019 | C++17/20 | C++ のツールや文法、いくつかの標準ライブラリ機能の設計を学べる解説書。[オープンソース版 :material-open-in-new:](https://ezoeryou.github.io/cpp-intro/){:target="_blank"} | +| [独習 C++ 新版](https://amzn.to/2ZWRrck) | 2019 | C++17 | :fontawesome-solid-graduation-cap: 初学者向け。「独習 C++ 第 4 版」を C++17 に対応させ解説を一新 | +| [[改訂第4版] C++ ポケットリファレンス](https://amzn.to/3p4p0pa) | 2021 | C++20 | 基本文法の解説に加え、逆引き形式で標準ライブラリの幅広い機能を紹介 | +| [C++ ソフトウェア設計 - 高品質設計の原則とデザインパターン](https://amzn.to/3tI3puI) | 2023 | C++20 | モダン C++ における設計技法やデザインパターンなど 39 項目を解説。[目次 :material-open-in-new:](https://www.oreilly.co.jp/books/9784814400454/){:target="_blank"} | +| [[改訂第5版]C++ ポケットリファレンス](https://amzn.to/3PrY2bf) | 2024 | C++23 | 基本文法の解説に加え、逆引き形式で標準ライブラリの幅広い機能を紹介。C++23 に対応 | + + +![](images/books.jpg) + + +## C++ 入門書の選び方 + +### [冒険で学ぶ はじめてのプログラミング](https://amzn.to/2IWnWnx) +3 日間コースの中高生向け C++ 教室で使われている教科書です。モダン C++ をベースに入門レベルの内容 (標準入出力、変数、if-else, for, 乱数、std::vector など)を扱っています。無理のないペースと物語形式の題材で、挫折せずにプログラミングに慣れることができるのが特長です。C++ は厚い本が多いなか、約 180 ページと手軽なので、完全読破をして自信をつけて次のステップに進むのに適した最初の一冊です。 + +### [やさしい C++ 第 5 版](https://amzn.to/3j9pVTD) +C++ の入門~中級レベルの内容のうち、基本的な部分(『冒険で学ぶ はじめてのプログラミング』に加え、関数、ポインタ、クラス、ファイルなど)を取り上げて、豊富な図を交えて説明しています。学習する順番も適切にデザインされていて親切です。約 550 ページと分量は多いですが、情報系の専門 / 高専 / 大学生が C++ を使えるよう、腰を据えて独学するのに最適な一冊です。C++11 以降の範囲 for や新しい標準ライブラリなど、モダンな機能への言及が少ない点には注意が必要です。 + +### [独習 C++ 新版](https://amzn.to/2ZWRrck) +独学のための十分なサンプルと説明が掲載されている入門書で、C++11~C++17 の機能も多く登場します。『やさしい C++ 第 5 版』では扱っていないラムダ式や右辺値参照、また簡単な紹介にとどまっていたテンプレートや例外、データ構造などをしっかり解説しています。序盤からやや高度なトピックも登場するため、未経験からこの本を読み始めるのは少し大変かもしれません。 + +### [C++ の絵本 第2版](https://amzn.to/2TFvvTO) +C 言語から C++ にステップアップするうえで新しく覚える必要のある内容(クラス、名前空間、参照、継承、テンプレートなど)に焦点を当て、豊富な図解でまとめています。一方で、それ以外の基本的な文法については説明を省いているため、ある程度の経験者が対象です。"Better C" 的なコードしか書けない人が「C++ らしい」コードを書けるようになるための重要な情報がまとめられています。 + +### [基礎からしっかり学ぶ C++ の教科書](https://amzn.to/2IXa1hf) +C++ の入門~中級レベルの多くの情報(『やさしい C++ 第 5 版』に加え、例外や並列処理)を、約 300 ページに効率よく圧縮して紹介しています。少しだけ C++ を使ったことのある人や、C 言語に慣れている人が、短時間で C++ の主要機能をインプットするのに向いています。 + +### [江添亮の C++ 入門](https://amzn.to/2HTGUbt) +古い C++ を学習した人が、最新の C++ の流儀に再入門するのに適した入門書です。 + +### [[改訂第4版] C++ ポケットリファレンス](https://amzn.to/3p4p0pa) +掲載されている C++ の機能の数は断トツのトップクラスです。総ページのうち大部分が標準ライブラリ機能の解説ですが、100 ページ以上ある第 2 章では C++ の言語機能も網羅的に解説しています(図などは無く、抜粋のコードがほとんどなので初学者にはやや難しいです)。入門書というよりも辞書的な性格が強い本です。ある程度 C++ の経験を積んでからもお世話になる本です。 ## 洋書 -| 書名 | 発行年 | C++ 規格 | 内容 | -|----------------------------------------------------------------------------|------|----------|------------------------------------------------------------------------------------------------------------------------------------| -| [C++ Templates: The Complete Guide (2nd Edition)](https://amzn.to/2TnVa4h) | 2017 | C++17/20 | C++17 のテンプレートの文法や様々なテクニックを解説。C++20 で導入されるコンセプトの紹介も。 [目次](https://www.oreilly.com/library/view/c-templates-the/9780134778808/) | -| [Mastering the C++17 STL](https://amzn.to/2tYz4X1) | 2017 | C++17 | C++17 までの標準ライブラリの機能や使い方を紹介。[目次](https://www.packtpub.com/application-development/mastering-c17-stl) | -| [C++ Concurrency in Action, Second Edition](https://amzn.to/2J2y26G) | 2019 | C++17 | C++17 における並行処理を詳細に解説。ロックフリーデータ構造の設計なども取り上げる。[試し読み](https://www.manning.com/books/c-plus-plus-concurrency-in-action-second-edition) | -| [C++17 in Detail](https://leanpub.com/cpp17indetail) | 2019 | C++17 | C++17 の主要な新機能・変更点のほか、Boost から標準ライブラリへの移行を解説。[目次](https://leanpub.com/cpp17indetail) | +| 書名 | 発行年 | C++ 規格 | 内容 | +|------------------------------------------------------------------------------------------------------------------------|------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| [C++ Templates: The Complete Guide (2nd Edition)](https://amzn.to/2TnVa4h) | 2017 | C++17/20 | C++17 のテンプレートの文法や様々なテクニックを解説。C++20 で導入されるコンセプトの紹介も。 [目次](https://www.oreilly.com/library/view/c-templates-the/9780134778808/) | +| [Mastering the C++17 STL](https://amzn.to/2tYz4X1) | 2017 | C++17 | C++17 までの標準ライブラリの機能や使い方を紹介。[目次](https://www.packtpub.com/application-development/mastering-c17-stl) | +| [Professional C++, 4th Edition](https://amzn.to/2Ov3SJ9) | 2018 | C++17 | [目次](https://www.wiley.com/en-jp/Professional+C++,+4th+Edition-p-9781119421306) | +| [Functional Programming in C++: How to improve your C++ programs using functional techniques](https://amzn.to/3iZFOf5) | 2018 | C++17 | C++ における関数型プログラミングを豊富な図で解説。[目次とプレビュー](https://www.manning.com/books/functional-programming-in-c-plus-plus) | +| [C++ Concurrency in Action, Second Edition](https://amzn.to/2J2y26G) | 2019 | C++17 | C++17 における並行処理を詳細に解説。ロックフリーデータ構造の設計なども取り上げる。[試し読み](https://www.manning.com/books/c-plus-plus-concurrency-in-action-second-edition) | +| [C++17 in Detail](https://leanpub.com/cpp17indetail) | 2019 | C++17 | C++17 の主要な新機能・変更点のほか、Boost から標準ライブラリへの移行を解説。[目次](https://leanpub.com/cpp17indetail) | +| [C++17 - The Complete Guide](http://www.cppstd17.com/) | 2019 | C++17 | [目次](http://www.cppstd17.com/) | +| [C++ Crash Course: A Fast-Paced Introduction](https://amzn.to/395CtqL) | 2019 | C++17 | (調査中) | +| [Advanced C++ Programming Cookbook](https://amzn.to/3fFA88f) | 2020 | C++20 | [目次](https://www.packtpub.com/programming/advanced-c-cookbook) / [サンプルコード](https://github.com/PacktPublishing/Advanced-CPP-Programming-CookBook) | +| [C++ System Programming Cookbook](https://amzn.to/3jfdoxU) | 2020 | C++20 | [目次](https://www.packtpub.com/programming/c-system-programming-cookbook) / [サンプルコード](https://github.com/PacktPublishing/C-System-Programming-Cookbook) | +| [Expert C++](https://amzn.to/2WsxY49) | 2020 | C++20 | [目次](https://www.packtpub.com/programming/mastering-c-programming) / [サンプルコード](https://github.com/PacktPublishing/Expert-CPP) | +| [C++ Lambda Story](https://amzn.to/3qLsbF8) | 2020 | C++20 | モダン C++ におけるラムダ式の機能やその変遷、ラムダ式の活用テクニックを解説。[目次](https://leanpub.com/cpplambda) | +| [The C++ Standard Library](https://leanpub.com/cpplibrary) | 2020 | C++20 | C++20 までの標準ライブラリ機能を解説。[目次](https://leanpub.com/cpplibrary) | +| [C++ Move Semantics - The Complete Guide: First Edition](https://amzn.to/3fTLgiM) | 2020 | C++20 | C++ のムーブセマンティクスを解説。[目次](http://www.cppmove.com/) | +| [Modern C++ Programming Cookbook, 2nd Edition](https://amzn.to/3naUMQs) | 2020 | C++20 | C++11~C++20 のモダンな機能の使い方を解説。パターンやイディオム、Boost.Test, Google Test, Catch2 を使ったテスト手法も扱う。[目次](https://www.packtpub.com/product/modern-c-programming-cookbook-second-edition/9781800208988) | +| [Beginning C++20: From Novice to Professional Sixth Edition](https://amzn.to/3qHFZRb) | 2020 | C++20 | C++20 に基づいた C++ プログラミング入門書。853 ページ。[目次](https://link.springer.com/book/10.1007/978-1-4842-5884-2) | +| [C++ Best Practices: 45ish Simple Rules with Specific Action Items for Better C++](https://amzn.to/3paeX2R) | 2021 | C++20 | より良い C++ コーディングのための 45 個のルールを説明。[目次](https://leanpub.com/cppbestpractices) | +| [Professional C++, 5th Edition](https://amzn.to/3bKXqdH) | 2021 | C++20 | 2018 年に発売された『Professional C++, 4th Edition』の C++20 対応版。1312 ページ | +| [C++20: Get the Details](https://leanpub.com/c20) | 2021 | C++20/23 | C++20 の新機能を 500 ページにわたって解説。[目次](https://leanpub.com/c20) | +| [Beautiful C++: 30 Core Guidelines for Writing Clean, Safe, and Fast Code](https://amzn.to/3JyIoX5) | 2021 | C++20 | C++ Core Guidelines のうち特に重要な 30 項目について、実践的なサンプルや解説を提供。[目次](https://www.oreilly.com/library/view/beautiful-c-30/9780137647767/) / [サンプルコード](https://godbolt.org/z/cg30-ch0.0) | + +## 技術同人誌 +| 書名 | 発表年 | C++ 規格 | 内容 | +|---------------------------------------------------------------------------------------------|------|----------|--------------------------------------------------------------------------------------------------------------------------------------| +| [C++ 標準的インターフェース](https://techbookfest.org/product/6417376601964544) | 2020 | C++17/20 | C++ 標準ライブラリのインターフェースについて解説。[目次とサンプル](https://github.com/onihusube/books/blob/master/sample/cpp_interface/sample.md) | +| [C++20 Modules 第2版](https://techbookfest.org/product/4680272314368000) | 2020 | C++20 | C++20 から追加されるモジュールの仕様を解説。[目次とサンプル](https://github.com/onihusube/books/blob/master/sample/cpp20_modules/sample.md) | +| [C++ 集成体](https://techbookfest.org/product/5650141820223488) | 2020 | C++20 | C++20 における集成体型について解説。[目次とサンプル](https://github.com/onihusube/books/blob/master/sample/cpp_aggregate/sample.md) | +| [ゲーム開発者のための C++11~C++20 技術書典10 Ver.](https://techbookfest.org/product/5738569643589632) | 2020 | C++20/23 | CEDEC 2020 講演での C++11~C++20 機能解説に追加の説明やサンプル、C++23 情報を加筆した本。[Zenn 版](https://zenn.dev/tetsurom/books/cpp11-cpp20-for-game-developers) | +| [C++ マルチスレッド一巡り](https://zenn.dev/yohhoy/books/cpp-stdlib-multithreading) | 2021 | C++20 | C++11~20 標準ライブラリで提供されるマルチスレッド関連機能を解説 | +| [競プロのための標準 C++](https://zenn.dev/reputeless/books/standard-cpp-for-competitive-programming) | 2021 | C++17 | 競技プログラミングで使える C++ の主要な標準機能のサンプル付き解説 | +| [C++20 ranges](https://techbookfest.org/product/5134506308665344?productVariantID=5896161179205632) | 2021 | C++20 | C++20 の Ranges ライブラリの使い方や設計を解説 (164 ページ) | +| [C++20 コア言語機能](https://techbookfest.org/product/4904567416291328?productVariantID=5196501510782976) | 2022 | C++20 | C++20 コア言語に追加された機能を解説 (128 ページ) | +| [C++20 ライブラリ機能 Vol.1](https://techbookfest.org/product/eGzbawjDfDAjJdkCwKbFtY?productVariantID=imM8MxR9zvu5fC0cpzWD6g) | 2022 | C++20 | C++20で新たに追加された標準ライブラリ機能のうち、規模の大きなものに絞って解説 (222 ページ) | +| [C++20 ライブラリ機能 Vol.2](https://techbookfest.org/product/w7kWwTCFWpgi7XYvGyKqpM?productVariantID=4ZazJVHsFG7e5AdL28WjpQ) | 2022 | C++20 | Vol.1 で取り扱っていない機能を解説 (174 ページ) | +| [return 文で起こること](https://techbookfest.org/product/wEvHSr45NZQ9EV7u3sMZ9Y?productVariantID=qXfWjZxLmjfM8a2UTcAWc9) | 2023 | C++20/23 | C++ の return 文に関するトピックを解説(72 ページ) | +| [C++23 ranges](https://techbookfest.org/product/mBjbXjatZwmYXPYJh1ddmB?productVariantID=qWzTAS8TW2x7AmPiYkge29) | 2023 | C++23 | C++23 の Ranges ライブラリの使い方や設計を解説(166 ページ) | diff --git a/docs/learn/communities.md b/docs/learn/communities.md index d0fe997..4b70470 100644 --- a/docs/learn/communities.md +++ b/docs/learn/communities.md @@ -1,36 +1,47 @@ description: C++ ユーザのためのコミュニティの紹介 -# コミュニティ +# C++ コミュニティ -C++ ユーザのためのコミュニティです。 +C++ のオンラインコミュニティです。 ## ユーザグループ -### Cpplang Slack -[:fa-slack: https://cpplang.now.sh/](https://cpplang.now.sh/) +### Cpplang Slack :fontawesome-brands-slack: +[https://cppalliance.org/slack/](https://cppalliance.org/slack/) 1 万人以上が登録し、100 以上のチャンネルが存在する、C++ に関する世界最大の Slack ワークスペースです。上記ページにメールアドレスを入力すると招待メールが届きます。 -### C++JP Facebook グループ -[:fa-facebook: https://www.facebook.com/groups/cppjp/](https://www.facebook.com/groups/cppjp/) +### reddit (r/cpp) :fontawesome-brands-reddit: +[https://www.reddit.com/r/cpp/](https://www.reddit.com/r/cpp/) + +C++ のニュース掲示板。 + +### C++JP Facebook グループ :fontawesome-brands-facebook: +[https://www.facebook.com/groups/cppjp/](https://www.facebook.com/groups/cppjp/) 400 人以上が参加する、日本の C++ プログラマのための Facebook グループです。書籍やイベントの情報が投稿されています。 +### C++ Twitter コミュニティ (日本語) :fontawesome-brands-x-twitter: + +[https://twitter.com/i/communities/1499396722514345984](https://twitter.com/i/communities/1499396722514345984) + +C++ ユーザが集まる、日本語の Twitter コミュニティです。 -## Twitter +### C++ Twitter コミュニティ (英語) :fontawesome-brands-x-twitter: + +[https://twitter.com/i/communities/1508588673310277633](https://twitter.com/i/communities/1508588673310277633) -### C++ に関する日本語のツイートを検索する方法 -Twitter の検索機能では、"C++20" のように `+` 記号を含むワードを検索できません。"C++20" でツイート検索をするには、[Yahoo!リアルタイム検索](https://search.yahoo.co.jp/realtime/search?p=C%2B%2B20&ei=UTF-8) を使います。このサービスでは、直近 1 カ月の日本語ツイートの中から、"C++20" のように `+` 記号を含むワードでの検索ができます。 +C++ ユーザが集まる、英語の Twitter コミュニティです。 ## 日本語の Q & A サイト -### Stack Overflow (日本語版) -C++ タグが付いた質問: [:fa-stack-overflow: https://ja.stackoverflow.com/questions/tagged/c%2b%2b](https://ja.stackoverflow.com/questions/tagged/c%2b%2b) +### Stack Overflow (日本語版) :fontawesome-brands-stack-overflow: +C++ タグが付いた質問: [https://ja.stackoverflow.com/questions/tagged/c%2b%2b](https://ja.stackoverflow.com/questions/tagged/c%2b%2b) ### teratail C++ タグが付いた質問: https://teratail.com/search?q=C%2B%2B -### 2 ちゃんねるスレッド +### 国内掲示板スレッド - [C++ 相談室](https://www.google.co.jp/search?q=site%3Ahttps%3A%2F%2Fmevius.5ch.net+%22C%2B%2B%E7%9B%B8%E8%AB%87%E5%AE%A4%22) - [C/C++ 室](https://www.google.com/search?q=site%3Ahttps%3A%2F%2Fmevius.5ch.net+%22C%2FC%2B%2B%E5%AE%A4%22) diff --git a/docs/learn/conferences.md b/docs/learn/conferences.md new file mode 100644 index 0000000..73849a1 --- /dev/null +++ b/docs/learn/conferences.md @@ -0,0 +1,108 @@ +description: C++ のカンファレンスと発表資料 + +# C++ カンファレンス + +C++ に関するカンファレンスと発表資料へのリンクです。 + +## 過去の講演のキーワード検索 + +- [C++ Talks List](https://wovo.github.io/ctl/) + +## C++Now +https://cppnow.org/ | [YouTube](https://www.youtube.com/user/BoostCon/) + +- [C++Now 2023](https://cppnow.org/history/2023/) +- [C++Now 2022](https://cppnow.org/history/2022/) +- [C++Now 2021](https://cppnow.org/history/2021/talks/) +- C++Now 2020 (開催キャンセル) +- [C++Now 2019](https://cppnow.org/history/2019/talks/) +- [C++Now 2018](https://cppnow.org/history/2018/talks/) +- [C++Now 2017](https://cppnow.org/history/2017/talks/) +- [C++Now 2016](https://cppnow.org/history/2016/talks/) +- [C++Now 2015](https://cppnow.org/history/2015/talks/) +- [C++Now 2014](https://github.com/boostcon/cppnow_presentations_2014) +- [C++Now 2013](https://github.com/boostcon/cppnow_presentations_2013) +- [C++Now 2012](https://github.com/boostcon/cppnow_presentations_2012) +- [BoostCon 2011](https://github.com/boostcon/2011_presentations) +- [BoostCon 2010](https://github.com/boostcon/2010_presentations) +- [BoostCon 2009](https://github.com/boostcon/2009_presentations) +- [BoostCon 2008](https://github.com/boostcon/2008_presentations) +- [BoostCon 2007](https://github.com/boostcon/2007_presentations) + + +## CppCon +https://cppcon.org/ | [YouTube](https://www.youtube.com/user/CppCon/) + +- CppCon 2023 +- [CppCon 2022](https://github.com/CppCon/CppCon2022) +- [CppCon 2021](https://github.com/CppCon/CppCon2021) +- [CppCon 2020](https://github.com/CppCon/CppCon2020) +- [CppCon 2019](https://github.com/CppCon/CppCon2019) +- [CppCon 2018](https://github.com/CppCon/CppCon2018) +- [CppCon 2017](https://github.com/CppCon/CppCon2017) +- [CppCon 2016](https://github.com/CppCon/CppCon2016) +- [CppCon 2015](https://github.com/CppCon/CppCon2015) +- [CppCon 2014](https://github.com/CppCon/CppCon2014) + + +## ACCU +https://accu.org/conf-main/main/ | [YouTube](https://www.youtube.com/channel/UCJhay24LTpO1s4bIZxuIqKw/) + +- [ACCU 2023](https://accu.org/conf-previous/accu2023/) +- [ACCU 2022](https://accu.org/conf-previous/2022/schedule/) +- [ACCU 2021](https://accu.org/conf-previous/2021/schedule/) +- ACCU 2020 (開催キャンセル) +- [ACCU Autumn 2019](https://accu.org/conf-previous/2019_autumn/schedule/) +- [ACCU 2019](https://accu.org/conf-previous/2019/schedule/) +- [ACCU 2018](https://accu.org/conf-previous/2018/schedule/) +- [ACCU 2017](https://accu.org/conf-previous/2017/schedule/) +- [ACCU 2016](https://accu.org/conf-previous/2016/schedule/) +- [ACCU 2015](https://accu.org/conf-previous/2015/schedule/) +- [ACCU 2014](https://accu.org/conf-previous/2014/schedule/) +- [ACCU 2013](https://accu.org/conf-previous/2013/schedule/) +- [ACCU 2012](https://accu.org/conf-previous/2012/schedule/) +- [ACCU 2011](https://accu.org/conf-previous/2011/schedule/) +- [ACCU 2010](https://accu.org/conf-previous/2010/schedule/) +- [ACCU 2009](https://accu.org/conf-previous/2009/schedule/) +- [ACCU 2008](https://accu.org/conf-previous/2008/schedule/) +- [ACCU 2007](https://accu.org/conf-previous/2007/schedule/) +- [ACCU 2006](https://accu.org/conf-previous/2006/schedule/) +- [ACCU 2005](https://accu.org/conf-previous/2005/schedule/) +- [ACCU 2004](https://accu.org/conf-previous/2004/schedule/) +- [ACCU 2003](https://accu.org/conf-previous/2003/schedule/) +- [ACCU 2002](https://accu.org/conf-previous/2002/schedule/) + + +## C++ Russia +https://cppconf-moscow.ru/en/ | [YouTube](https://www.youtube.com/channel/UCJ9v015sPgEi0jJXe_zanjA/playlists) + +- [C++ Russia 2023](https://cppconf.ru/en/) +- [C++ Russia 2022](https://cppconf.ru/en/archive/2022/) +- [C++ Russia 2021](https://cppconf.ru/en/archive/2021/) +- [C++ Russia 2020 Piter](https://cppconf.ru/en/archive/2020%20Piter/) +- [C++ Russia 2020 Moscow](https://cppconf.ru/en/archive/2020%20Moscow/) +- [C++ Russia 2019 Piter](https://cppconf.ru/en/archive/2019%20Piter/) +- [C++ Russia 2019](https://cppconf.ru/en/archive/2019/) +- [C++ Russia 2018](https://2018.cppconf-piter.ru/index-en.html) +- [C++ Russia 2017](https://www.youtube.com/playlist?list=PLZN9ZGiWZoZojYik8EdApUgPwa0YM3Yuz) +- [C++ Russia 2016](https://www.youtube.com/playlist?list=PLZN9ZGiWZoZp2olvWw-OysBHqIv2ufL3d) +- [C++ Russia 2015](https://www.youtube.com/playlist?list=PLZN9ZGiWZoZq3nObp2P8BJvsCc639tYSd) + + +## Core C++ +https://corecpp.org/ | [YouTube](https://www.youtube.com/channel/UCE14XYFaK1fDTnOTqlOFrrQ/) + +- [Core C++ 2019](https://github.com/CoreCppIL/CoreCpp2019) + + +## Meeting C++ +https://meetingcpp.com/ + + +## code::dive +https://codedive.pl/ + + +## 参考文献 +- Conferences Worldwide + https://isocpp.org/wiki/faq/conferences-worldwide/ \ No newline at end of file diff --git a/docs/learn/images/books.jpg b/docs/learn/images/books.jpg new file mode 100644 index 0000000..54a2916 Binary files /dev/null and b/docs/learn/images/books.jpg differ diff --git a/docs/learn/online-resources.md b/docs/learn/online-resources.md index 472fbdf..e30f2aa 100644 --- a/docs/learn/online-resources.md +++ b/docs/learn/online-resources.md @@ -1,25 +1,39 @@ description: オンラインでアクセスできる C++ 資料の紹介 -# オンライン資料 +# C++ オンライン資料 オンラインでアクセスできる C++ リソースです。 -## 日本語のリファレンス -- [cpprefjp](https://cpprefjp.github.io/) -- [cppreference.com 日本語版](https://ja.cppreference.com/w/cpp) +## 日本語のリファレンス・解説サイト +- [cpprefjp :material-open-in-new:](https://cpprefjp.github.io/){:target="_blank"} +- [C++ の歩き方 | cppmap :material-open-in-new:](https://cppmap.github.io/){:target="_blank"} ## 英語のリファレンス -- [cppreference.com](https://en.cppreference.com/w/) -- [C++ Language Reference](https://docs.microsoft.com/en-us/cpp/cpp/cpp-language-reference) +- [cppreference.com :material-open-in-new:](https://en.cppreference.com/w/){:target="_blank"} +- [C++ Language Reference :material-open-in-new:](https://docs.microsoft.com/en-us/cpp/cpp/cpp-language-reference){:target="_blank"} +- [hacking C++ :material-open-in-new:](https://hackingcpp.com/){:target="_blank"} + - 豊富なインフォグラフィックで C++ の機能を網羅的に解説 + +## プレゼンテーション +- [CEDEC 2024 | ゲーム開発者のための C++17~C++23, 近年の C++ 規格策定の動向 :material-open-in-new:](https://www.docswell.com/s/cpp/5XEY92-cedec2024){:target="_blank"} +- [CEDEC 2020 | ゲーム開発者のための C++11~C++20, 将来の C++ の展望 :material-open-in-new:](https://speakerdeck.com/cpp/cedec2020){:target="_blank"} +- [C++ に関するカンファレンスと発表資料へのリンク :material-open-in-new:](https://cppmap.github.io/learn/conferences/){:target="_blank"} + +## 論文 +- [Thriving in a Crowded and Changing World: C++ 2006–2020 :material-open-in-new:](https://www.stroustrup.com/hopl20main-p5-p-bfc9cd4--final.pdf){:target="_blank"} + - C++ 生みの親ストラウストラップ氏による 2006~2020 年の C++ の進化の解説論文 ## コーディングガイドライン -- [C++ Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) -- [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) | [日本語訳](https://ttsuki.github.io/styleguide/cppguide.ja.html) -- [LLVM Coding Standards](https://llvm.org/docs/CodingStandards.html) +- [組込みソフトウェア開発向けコーディング作法ガイド C++ 言語版 Ver.2.0(2016 年) :material-open-in-new:](https://www.ipa.go.jp/archive/publish/secbooks20161001.html){:target="_blank"} +- [C++ Core Guidelines :material-open-in-new:](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines){:target="_blank"} | [見出し日本語訳 :material-open-in-new:](https://qiita.com/tetsurom/items/322c7b58cddaada861ff){:target="_blank"} +- [Google C++ Style Guide :material-open-in-new:](https://google.github.io/styleguide/cppguide.html){:target="_blank"} | [日本語訳 :material-open-in-new:](https://ttsuki.github.io/styleguide/cppguide.ja.html){:target="_blank"} +- [LLVM Coding Standards :material-open-in-new:](https://llvm.org/docs/CodingStandards.html){:target="_blank"} +- [Safer Usage Of C++ :material-open-in-new:](https://docs.google.com/document/d/e/2PACX-1vRZr-HJcYmf2Y76DhewaiJOhRNpjGHCxliAQTBhFxzv1QTae9o8mhBmDl32CRIuaWZLt5kVeH9e9jXv/pub){:target="_blank"} + - Chromium チームによる、C++ の安全性を一層高めるためのガイドライン案 ## C++ 規格関連 -- [C++ 規格](https://cppmap.github.io/standardization/working-drafts/) +- [C++ 規格 :material-open-in-new:](https://cppmap.github.io/standardization/working-drafts/){:target="_blank"} ## FAQ -- [C++ FAQ](https://isocpp.org/faq) - - [Marshall Cline の C++ FAQ](http://www.cs.technion.ac.il/users/yechiel/c++-faq/index.html) と [Bjarne Stroustrup の C++ FAQ](http://stroustrup.com/bs_faq.html) を統合・更新した Q&A 集 +- [C++ FAQ :material-open-in-new:](https://isocpp.org/faq){:target="_blank"} + - [Marshall Cline の C++ FAQ :material-open-in-new:](http://www.cs.technion.ac.il/users/yechiel/c++-faq/index.html){:target="_blank"} と [Bjarne Stroustrup の C++ FAQ :material-open-in-new:](http://stroustrup.com/bs_faq.html){:target="_blank"} を統合・更新した Q&A 集 diff --git a/docs/learn/studymeetings.md b/docs/learn/studymeetings.md index b8dff05..61d1ff6 100644 --- a/docs/learn/studymeetings.md +++ b/docs/learn/studymeetings.md @@ -1,54 +1,204 @@ description: 国内で開催されている C++ 関連の勉強会イベントの紹介 -# 国内の勉強会 +# 国内の C++ 勉強会 国内で開催されている C++ 関連の勉強会イベントです。 + +## 大阪 C++ 読書会 +>大阪でC++に関するものを読み進める会です。 誰かが発表するといったスタイルではなく、みんなでわからないところを話し合って読んでいくスタイルの会です。 + +| | | +|------|--------| +| Connpass | [https://cpp-osaka.connpass.com/ :material-open-in-new:](https://cpp-osaka.connpass.com/){:target="_blank"} | +| Cosense | [https://scrapbox.io/cpp-osaka/ :material-open-in-new:](https://scrapbox.io/cpp-osaka/){:target="_blank"} | +| X ハッシュタグ | [#cpp読書会 :material-open-in-new:](https://x.com/search?q=%23cpp%E8%AA%AD%E6%9B%B8%E4%BC%9A&f=live){:target="_blank"} | + +### 聴講スタイルの勉強会 +- [C++ breaktime 2025/Winter :material-open-in-new:](https://cpp-osaka.connpass.com/event/374884/){:target="_blank"} +- [C++ breaktime 2025/Summer :material-open-in-new:](https://cpp-osaka.connpass.com/event/356031/){:target="_blank"} + + + +## C++ Meetup +- ウーブン・バイ・トヨタが主催する、C++ 専門家を招いたパネルディスカッション + +| 日時 | テーマ | ムービー | +|------|--------|:--:| +| 2024-03-21 | Reflection in C++26: the renaissance of C++ | [:simple-youtube:](https://www.youtube.com/watch?v=vRda0mGYg_A){:target="_blank"} | +| 2023-11-21 | Dangerous optimizations - C++ meetup | [:simple-youtube:](https://www.youtube.com/watch?v=MddV3jwqcTk){:target="_blank"} | +| 2023-06-07 | Making safer and more secure Native Applications | [:simple-youtube:](https://www.youtube.com/watch?v=rkDTgkN7FIY){:target="_blank"} | +| 2023-02-28 | C++ and Security | [:simple-youtube:](https://www.youtube.com/watch?v=mrQKfl893e8){:target="_blank"} | +| 2022-11-22 | | [:simple-youtube:](https://www.youtube.com/watch?v=FU5Tl_Zdtmw){:target="_blank"} | + + ## C++ MIX ->「C++ MIX」は、C++周辺の勉強会です。 -標準C++、標準外のライブラリやツールの紹介はもちろんですが、RustやGoなどの後継言語のように、C++プログラマに知ってもらいたい話を広く扱っていきます。 -この勉強会では、発表者によるプレゼンテーションだけでなく、参加者のみなさんと議論する時間も今後用意していきたいと考えています。 +- C++ プログラマのための勉強会 +- 発表だけでなく、参加者どうしのカジュアルな議論の時間も設けている + +| | | +|------|--------| +| Connpass | [https://cppmix.connpass.com/ :material-open-in-new:](https://cppmix.connpass.com/){:target="_blank"} | +| YouTube | [https://www.youtube.com/channel/UC3c011RjfXoU4Gj86V7sb_w :material-open-in-new:](https://www.youtube.com/channel/UC3c011RjfXoU4Gj86V7sb_w){:target="_blank"} | +| X ハッシュタグ | [#cppmix :material-open-in-new:](https://x.com/search?q=%23cppmix&f=live){:target="_blank"} | + +#### C++ MIX #17 [(2026-03-13)](https://cppmix.connpass.com/event/381312/) +| タイトル | 発表者 | ムービー | +|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|----------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [TypeScript/DenoでC++/CMakeプロジェクトを支援する話](https://www.docswell.com/s/5942872680/KL3XD3-2026-03-13-150147) | 塩澤 達矢 | | +| [C#で作ったアプリにビルドした日付を入れる](https://drive.google.com/file/d/11t7HHjndcUjPCRTO8nwWTbKjrBXd2_83/view?usp=share_link) | 西山信行 | | +| [作ったMQTTライブラリをBoostに提案してみた](https://docs.google.com/presentation/d/13eTuVa2Zp7D2QyvUzhXg5jdc8WFAkxMO/edit?usp=sharing&ouid=102771999813921048196&rtpof=true&sd=true) | 近藤貴俊 | | +| [Modern C++を用いたメモリリークフリー・クラッシュフリーなOBSプラグイン開発手法に関する一検討](https://speakerdeck.com/umireon/modanobspuraguinkai-fa) | Kaito Udagawa(umireon) | | + +#### C++ MIX #16 [(2025-10-17)](https://cppmix.connpass.com/event/369191/) +| タイトル | 発表者 | ムービー | +|-----------------------------------------------------------------------------------------------------------------------|-----------------|----------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [量子コンピュータのシミュレーション](https://www.docswell.com/s/gyu-don/K447N6-2025-10-17-192918) | gyu-don | | +| [プラグイン開発で学習するUnrealEngine C++(実践編)](https://www.docswell.com/s/YuukiOgino/574MN1-cppmix16-UE5Plugin) | 荻野雄季 | | +| [C++26 std::execution](https://www.docswell.com/s/yohhoy/ZQXJ2E-cpp26-execution) | yohhoy | | + +#### C++ MIX #15 [(2025-07-18)](https://cppmix.connpass.com/event/359098/) +| タイトル | 発表者 | ムービー | +|------------------------------------------------------------------------------------------------------------------------------------|-----------------|--------------------------------------------------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [P2P通信の標準化 WebRTCを知ろう](https://speakerdeck.com/faithandbrave/p2ptong-xin-nobiao-zhun-hua-webrtcwozhi-rou) | Akira Takahashi | [:simple-youtube:](https://youtu.be/c-admz1IeWs) | +| [私の機械学習フレームワーク](https://docs.google.com/presentation/d/1SC41aBHOkCfVkjfNEMjVK6BGWWXSn1pW5bVNj_QF6pE/edit?usp=sharing) | 池田公平 | [:simple-youtube:](https://youtu.be/bSdbJZ_JW1Q) | +| [オーディオ処理入門 ボイスチェンジャーを作ろう](https://speakerdeck.com/hotwatermorning/oteiochu-li-ru-men-hoisutiensiyawozuo-rou) | hotwatermorning | [:simple-youtube:](https://youtu.be/45keX6SxxI0) | + +#### C++ MIX #14 [(2025-04-25)](https://cppmix.connpass.com/event/349703/) +| タイトル | 発表者 | ムービー | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|----------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [C++26アップデート 2025-03](https://speakerdeck.com/faithandbrave/c-plus-plus-26atupudeto-2025-03) | Akira Takahashi | | +| [Data Parallel C++ と OpenVINO で iGPU, NPU の計算速度とエネルギー効率を測ってみた](https://www.slideshare.net/slideshow/data-parallel-c-openvino-igpu-npu/278404192) | 鈴木宗良 | | +| [LLM超入門 (仮)](https://github.com/ssa-study/documents/blob/master/LLM%E8%B6%85%E5%85%A5%E9%96%802025.pdf) | 池田公平 | | + +#### C++ MIX #13 [(2025-02-21)](https://cppmix.connpass.com/event/343088/) +| タイトル | 発表者 | ムービー | +|-----------------------------------------------------------------------------------------------------------------------|-----------------|----------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [プラグイン開発で学習するUnrealEngine C++(概要編)](https://www.docswell.com/s/YuukiOgino/ZXEQPX-cppmix13-UE5Plugin) | 荻野雄季 | | +| [C++23ジェネレータの紹介](https://www.docswell.com/s/yohhoy/KEXQPG-cpp23gen) | yohhoy | | +| [GCCの<type_traits>最適化 (リモート発表予定)](https://drive.proton.me/urls/349KVCZH5C#2SRNr0r2aHX5) | Ken Matsui | | -- https://cppmix.connpass.com/ -- [Youtube チャンネル](https://www.youtube.com/channel/UC3c011RjfXoU4Gj86V7sb_w) -- Twitter ハッシュタグ [#cppmix](https://twitter.com/search?q=%23cppmix) +#### C++ MIX #12 [(2024-12-20)](https://cppmix.connpass.com/event/337028/) +| タイトル | 発表者 | ムービー | +|--------------------------------------------------------------------------------------------------------------------|-------------------|--------------------------------------------------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [C++26から導入される「エラー性動作」を解説](https://speakerdeck.com/faithandbrave/c-plus-plus-26-eraxing-dong-zuo) | Akira Takahashi | [:simple-youtube:](https://youtu.be/7AcY_uEPK1Q) | +| [Rangeアダプタを作る](https://speakerdeck.com/tetsurom/rangeadaputawozuo-ru) | Tetsuro Matsumura | [:simple-youtube:](https://youtu.be/eFFAFuf74Eg) | +| [HTTP/3サーバ実装について](https://speakerdeck.com/yasunorihigashiyama/3) | 東山裕徳 | [:simple-youtube:](https://youtu.be/mT0eyMP7o0E) | +| [return文におけるmoveについて](https://speakerdeck.com/onihusube/returnwen-niokerustd-movenituite) | 安藤弘晃 | [:simple-youtube:](https://youtu.be/zxlCgBNeCUg) | -### C++ MIX #4 [(2019-06-26)](https://cppmix.connpass.com/event/132145/) +#### C++ MIX #11 [(2024-06-14)](https://cppmix.connpass.com/event/319167/) +| タイトル | 発表者 | ムービー | +|------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|--------------------------------------------------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [コンテナと文字列の中間インタフェースspanとstring_view](https://speakerdeck.com/faithandbrave/kontenatowen-zi-lie-nozhong-jian-intahuesuspantostring-view) | Akira Takahashi | [:simple-youtube:](https://youtu.be/1uxyzeWeyhw) | +| [C++23 スタックトレースライブラリ](https://speakerdeck.com/faithandbrave/c-plus-plus-23-sutatukutoresuraiburari) | Akira Takahashi | [:simple-youtube:](https://youtu.be/zUspXaFIea4) | +| 最短 1 行、C++ と Siv3D で生成 AI 活用アプリを作る | Ryo Suzuki | [:simple-youtube:](https://youtu.be/RwkxHe_N8Vs) | +| [これってどう読むの…?](https://speakerdeck.com/5mingame2/c-plus-plus-mix-number-11-koredoudu-muno-dot-dot-dot) | 西山 信行 | [:simple-youtube:](https://youtu.be/RmaoC2es4sA) | + +#### C++ MIX #10 [(2024-04-19)](https://cppmix.connpass.com/event/311283/) +| タイトル | 発表者 | ムービー | +|------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|--------------------------------------------------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [x64 のスカラー,SIMD 演算性能を測ってみた](https://www.slideshare.net/slideshow/x64-simd-c-mix-10/267364631) | 鈴木 宗良 | [:simple-youtube:](https://youtu.be/AB-vf6TvAIw) | +| [Boost.Asioにおけるcoroutineの活用法](https://1drv.ms/p/c/9164139b3166c293/Edth1kidYtFJt0JLjpUDE4cB5ALYoamKTPAfnWyPTgm_iw?e=QXy9dj) | 近藤貴俊 | [:simple-youtube:](https://youtu.be/TrFfJoYklvk) | +| [if constexpr文はテンプレート世界のラムダ式である](https://speakerdeck.com/faithandbrave/if-constexprwen-hatenpuretoshi-jie-noramudashi-dearu) | Akira Takahashi | [:simple-youtube:](https://youtu.be/Wr3B7ZT4FHY) | + +#### C++ MIX #9 [(2024-02-09)](https://cppmix.connpass.com/event/305699/) +| タイトル | 発表者 | ムービー | +|-----------------------------------------------------------------------------------------------------------------|------------------|--------------------------------------------------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [C++とWin32 APIを利用した中品質なリソースファイルのホットリロード](https://www.docswell.com/slide/5W1QQ4/embed) | 荻野雄季 | [:simple-youtube:](https://youtu.be/A95aFKW7DSw) | +| [C++でつくる歴史シミュレーションGIS](https://speakerdeck.com/aspjt/c-plus-plus-detukuruli-shi-simiyuresiyongis) | Hayato Kasuga | [:simple-youtube:](https://youtu.be/GyUjW8MAhLw) | +| [使いたい標準C++機能がない環境でいかに実装・設計するか](https://speakerdeck.com/faithandbrave/shi-itaibiao-zhun-c-plus-plus-ji-neng-ganaihuan-jing-deikanishi-zhuang-she-ji-suruka-55e6f70a-5ff8-46f0-9cda-d7229c5e6d65) | Akira Takahashi | [:simple-youtube:](https://youtu.be/XFKoQbsP-_8) | +| [C++ 開発が少し便利になる Visual Studio の最近の機能](https://speakerdeck.com/cpp/cppmix9) | Ryo Suzuki | [:simple-youtube:](https://youtu.be/eP-rm5_Rl7E) | + +#### C++ MIX #8 [(2023-12-06)](https://cppmix.connpass.com/event/301925/) +| タイトル | 発表者 | ムービー | +|-----------------------------------------------------------------------------------------------------------------------------|------------------|--------------------------------------------------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [C++20からC++23での変化](https://speakerdeck.com/faithandbrave/c-plus-plus-20karac-plus-plus-23madenobian-hua) | Akira Takahashi | [:simple-youtube:](https://youtu.be/75HuEvqklkQ) | +| [オレオレGithub Copilotを作ろう](https://docs.google.com/presentation/d/1Euz4Fr1gMX9CchM2MbexxTIijShCChIJUzDp18349R0/edit) | Shintarou Okada | [:simple-youtube:](https://youtu.be/sd9txd65iAY) | +| [未定義動作でFizzBuzz](https://speakerdeck.com/kaityo256/undefined-fizz-buzz) | kaityo256 | [:simple-youtube:](https://youtu.be/bEDY9E5yKhc) | +| [構文解析で使えるC++のテクニック](https://docs.google.com/presentation/d/15lNgrej1hugJkMi0NZ7iGe69REon9u8FaH3xKhT_u7c/edit) | Ryosuke Hirakida | [:simple-youtube:](https://youtu.be/EIqEEZywdi4) | + +#### C++ MIX #7 [(2020-01-29)](https://cppmix.connpass.com/event/160166/) +| タイトル | 発表者 | ムービー | +|------------------------------------------------------|-------------------|------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [蛇を埋葬する](https://www.slideshare.net/ShintarouOkada/pythonembed-225851252) | Shintarou Okada | [:simple-youtube:](https://youtu.be/4ldJsy9UU4o) | +| [みんな大好き!using ディレクティブ!](https://speakerdeck.com/kariyamitsuru/using-directive) | Kariya Mitsuru | [:simple-youtube:](https://youtu.be/Mv10rl9obAw) | +| [みんな代替トークン使とる。使てへんのお前だけ。](https://speakerdeck.com/kariyamitsuru/alternative-tokens) | Kariya Mitsuru | [:simple-youtube:](https://youtu.be/TGEDRbvRwfY) | +| [続・モジュール](https://www.slideshare.net/TetsuroMatsumura/introduction-to-c-modules-part-2-225829715) | Tetsuro Matsumura | [:simple-youtube:](https://youtu.be/zI0PPLucONk) | +| RustとC++を比べてみた(当社比) | いなむのみたま | [:simple-youtube:](https://youtu.be/lLb69NSx_Lk) | + +#### C++ MIX #6 [(2019-11-20)](https://cppmix.connpass.com/event/150527/) +| タイトル | 発表者 | ムービー | +|------------------------------------------------------|-----------------|------| +| 勉強会と会場の説明 | Akira Takahashi | | +| [std::format - C++20 時代の便利な文字列フォーマット](https://www.dropbox.com/s/4gt1y5i3ogt9bvr/cppmix-C%2B%2B20Format.pdf?dl=0) | Ryo Suzuki | [:simple-youtube:](https://youtu.be/UGs10Unwams) | +| インターンシップでC++を使用したゲーム開発を経験した話 | がっちょ | [:simple-youtube:](https://youtu.be/V0ENpMzZ4OE) | +| [コンパイラのいじめ方](https://speakerdeck.com/kaityo256/how-to-fight-the-compiler) | kaityo256 | [:simple-youtube:](https://youtu.be/rC-YSvtRrHw) | +| [書籍『独習C++』の改訂について (仮) ](https://docs.google.com/presentation/d/1dfJ537pkSwYYRai4mktlAoHwNnqmnOUqfmQiVjDJClY/edit) | Flast | [:simple-youtube:](https://youtu.be/j30j7poj3J0) | + +#### C++ MIX #5 [(2019-09-04)](https://cppmix.connpass.com/event/141908/) +| タイトル | 発表者 | ムービー | +|-----------------------------|-----------------|------| +| 勉強会と会場の説明 | Shintaro Okada | | +| [自作OS向けにlibc++をビルドする方法](https://www.slideshare.net/uchan_nos/building-libcxxformyos) | uchan | [:simple-youtube:](https://youtu.be/2G9My4DR_N0) | +| [C++ 製グラフィックライブラリ Skia の紹介](https://speakerdeck.com/pine/c-plus-plus-zhi-kurahuitukuraihurari-skia-falseshao-jie) | 水音ぴね | [:simple-youtube:](https://youtu.be/Wvx2xW3c8_w) | +| [Unreal C++ を始めてみた時の躓いたTips](https://www.slideshare.net/MakotoAdachi/cmix5) | akoto | [:simple-youtube:](https://youtu.be/Uy1qxTDlOA4) | +| [C++20ステータス](https://speakerdeck.com/faithandbrave/c-plus-plus-20-status) | Akira Takahashi | [:simple-youtube:](https://youtu.be/0xbmP9iJFRM) | +| [20分くらいでわかった気分になれるC++20コルーチン](https://www.slideshare.net/yohhoy/20c20) | yohhoy | [:simple-youtube:](https://youtu.be/XkZ260fgsq0) | + +#### C++ MIX #4 [(2019-06-26)](https://cppmix.connpass.com/event/132145/) | タイトル | 発表者 | ムービー | |----------------------------------------------------------------------------------------------------|----------------------|------| | 勉強会と会場の説明 | Shintaro Okada | | -| [C++ でも Result したい](https://speakerdeck.com/loligothick/c-plus-plus-demorustfalseresultgashi-itai) | いなむのみたま (@mitama_rs) | | -| [世界を創造する OSS 開発を始めた話](https://www.slideshare.net/Gaccho1/oss-c-mix-151965959) | がっちょ | | -| [C++ で HTTP Proxy](https://www.slideshare.net/YasunoriHigashiyama/chttp-proxy) | 東山裕徳 | | -| [モジュールの概要](https://www.slideshare.net/TetsuroMatsumura/c20-152189285) | Tetsuro Matsumura | | +| [C++ でも Result したい](https://speakerdeck.com/loligothick/c-plus-plus-demorustfalseresultgashi-itai) | いなむのみたま (@mitama_rs) | [:simple-youtube:](https://youtu.be/_GYnVhGmenY) | +| [世界を創造する OSS 開発を始めた話](https://www.slideshare.net/Gaccho1/oss-c-mix-151965959) | がっちょ | [:simple-youtube:](https://youtu.be/cNEo65uGJXY) | +| [C++ で HTTP Proxy](https://www.slideshare.net/YasunoriHigashiyama/chttp-proxy) | 東山裕徳 | [:simple-youtube:](https://youtu.be/ldQr9meQY00) | +| [モジュールの概要](https://www.slideshare.net/TetsuroMatsumura/c20-152189285) | Tetsuro Matsumura | [:simple-youtube:](https://youtu.be/_UhfHhRwPQY) | -### C++ MIX #3 [(2019-04-17)](https://cppmix.connpass.com/event/124862/) +#### C++ MIX #3 [(2019-04-17)](https://cppmix.connpass.com/event/124862/) | タイトル | 発表者 | ムービー | |------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|----------------------------------------------------------| | 勉強会と会場の説明 | Shintaro Okada | | -| [Clangにreflection/metaclass提案っぽいものを実装してみた話](https://speakerdeck.com/hori1991/clangnireflectionti-an-tupoimofalsewoshi-zhuang-sitemitahua) | Iwahori Kodai | [:fa-play:](https://www.youtube.com/watch?v=FYZKnb8NOsA) | -| [C++ 情報サイト「C++ の歩き方 \| cppmap」を作っている話](https://www.dropbox.com/s/6zgithu4bakq58x/cppmap%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E8%A9%B1.pdf?dl=0) | Ryo Suzuki | [:fa-play:](https://www.youtube.com/watch?v=FXRzYQGM7zE) | -| [データベースとポリモーフィズムとModern C++](https://www.slideshare.net/ToshitakaAdachi/database-polymorphism-and-modern-c/) | 安達俊貴 | [:fa-play:](https://www.youtube.com/watch?v=K-xuX-HdOwY) | -| [C++20の概要 #1 言語機能編](https://www.slideshare.net/faithandbrave/cpp20-overview-language-features) | Akira Takahash | [:fa-play:](https://www.youtube.com/watch?v=JmbHiCAMX2U) | +| [Clangにreflection/metaclass提案っぽいものを実装してみた話](https://speakerdeck.com/hori1991/clangnireflectionti-an-tupoimofalsewoshi-zhuang-sitemitahua) | Iwahori Kodai | [:simple-youtube:](https://www.youtube.com/watch?v=FYZKnb8NOsA) | +| [C++ 情報サイト「C++ の歩き方 \| cppmap」を作っている話](https://www.dropbox.com/s/6zgithu4bakq58x/cppmap%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E8%A9%B1.pdf?dl=0) | Ryo Suzuki | [:simple-youtube:](https://www.youtube.com/watch?v=FXRzYQGM7zE) | +| [データベースとポリモーフィズムとModern C++](https://www.slideshare.net/ToshitakaAdachi/database-polymorphism-and-modern-c/) | 安達俊貴 | [:simple-youtube:](https://www.youtube.com/watch?v=K-xuX-HdOwY) | +| [C++20の概要 #1 言語機能編](https://www.slideshare.net/faithandbrave/cpp20-overview-language-features) | Akira Takahash | [:simple-youtube:](https://www.youtube.com/watch?v=JmbHiCAMX2U) | -### C++ MIX #2 [(2019-02-20)](https://cppmix.connpass.com/event/115640/) +#### C++ MIX #2 [(2019-02-20)](https://cppmix.connpass.com/event/115640/) | タイトル | 発表者 | ムービー | |------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------|----------------------------------------------------------| -| [勉強会と会場の説明](https://www.slideshare.net/faithandbrave/cppmix-02) | Akira Takahashi | [:fa-play:](https://www.youtube.com/watch?v=yviMSUKPF24) | -| [iOSアプリ『パズモナ』のひみつ](https://speakerdeck.com/5mingame2/c-plus-plus-mix-number-2-pazumonafalsehimitu) | Nobuyuki Nishiyama | [:fa-play:](https://www.youtube.com/watch?v=bienAWHUXYA) | -| [Qt×Reactive Extensions](https://www.slideshare.net/TetsuroMatsumura/qt-reactive-extensions-ja?ref=https://cppmix.connpass.com/event/115640/presentation/) | Tetsuro Matsumura | [:fa-play:](https://www.youtube.com/watch?v=1Sb3XD8sPTI) | -| [C++のパッケージマネージャ「poac」を開発した話](https://speakerdeck.com/matken11235/poac-is-a-package-manager-for-c-plus-plus) | Ken Matsui | [:fa-play:](https://www.youtube.com/watch?v=znVZkH3PjVw) | -| 雑談タイム | | | +| [勉強会と会場の説明](https://www.slideshare.net/faithandbrave/cppmix-02) | Akira Takahashi | [:simple-youtube:](https://www.youtube.com/watch?v=yviMSUKPF24) | +| [iOSアプリ『パズモナ』のひみつ](https://speakerdeck.com/5mingame2/c-plus-plus-mix-number-2-pazumonafalsehimitu) | Nobuyuki Nishiyama | [:simple-youtube:](https://www.youtube.com/watch?v=bienAWHUXYA) | +| [Qt×Reactive Extensions](https://www.slideshare.net/TetsuroMatsumura/qt-reactive-extensions-ja?ref=https://cppmix.connpass.com/event/115640/presentation/) | Tetsuro Matsumura | [:simple-youtube:](https://www.youtube.com/watch?v=1Sb3XD8sPTI) | +| [C++のパッケージマネージャ「poac」を開発した話](https://speakerdeck.com/matken11235/poac-is-a-package-manager-for-c-plus-plus) | Ken Matsui | [:simple-youtube:](https://www.youtube.com/watch?v=znVZkH3PjVw) | -### C++ MIX #1 [(2018-12-06)](https://cppmix.connpass.com/event/107576/) +#### C++ MIX #1 [(2018-12-06)](https://cppmix.connpass.com/event/107576/) | タイトル | 発表者 | ムービー | |-------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|----------------------------------------------------------| -| [勉強会と会場、最近のC++の説明](https://www.slideshare.net/faithandbrave/cppmix-01) | Akira Takahashi | [:fa-play:](https://www.youtube.com/watch?v=HfKNtAHMxiQ) | -| [Menohにおける C++実装 / C API / C++API](https://www.slideshare.net/ShintarouOkada/menohc-c-api-capi) | okdshin | [:fa-play:](https://www.youtube.com/watch?v=3_0p_yGv52Q) | -| [Undefined Behaviorに対する防衛術](https://speakerdeck.com/loligothick/defense-against-undefined-behavior-wei-ding-yi-dong-zuo-nidui-surufang-wei-shu) | いなむのみたま | [:fa-play:](https://www.youtube.com/watch?v=gc58TZ5m2dg) | -| [C++ を教える ~早稲田大学の小中高生向けプログラミング教室における事例紹介~](https://www.dropbox.com/s/mfhncuyo723lfai/C%2B%2B%E3%82%92%E6%95%99%E3%81%88%E3%82%8B.pdf) | Reputeless | [:fa-play:](https://www.youtube.com/watch?v=O3i6gCpZKDw) | -| [避けよう memset の乱用](https://agate-pris.gitlab.io/slides/no-more-memset/) | agate-pris | [:fa-play:](https://www.youtube.com/watch?v=IxPqx4ZOnFw) | +| [勉強会と会場、最近のC++の説明](https://www.slideshare.net/faithandbrave/cppmix-01) | Akira Takahashi | [:simple-youtube:](https://www.youtube.com/watch?v=HfKNtAHMxiQ) | +| [Menohにおける C++実装 / C API / C++API](https://www.slideshare.net/ShintarouOkada/menohc-c-api-capi) | okdshin | [:simple-youtube:](https://www.youtube.com/watch?v=3_0p_yGv52Q) | +| [Undefined Behaviorに対する防衛術](https://speakerdeck.com/loligothick/defense-against-undefined-behavior-wei-ding-yi-dong-zuo-nidui-surufang-wei-shu) | いなむのみたま | [:simple-youtube:](https://www.youtube.com/watch?v=gc58TZ5m2dg) | +| [C++ を教える ~早稲田大学の小中高生向けプログラミング教室における事例紹介~](https://www.dropbox.com/s/mfhncuyo723lfai/C%2B%2B%E3%82%92%E6%95%99%E3%81%88%E3%82%8B.pdf) | Reputeless | [:simple-youtube:](https://www.youtube.com/watch?v=O3i6gCpZKDw) | +| [避けよう memset の乱用](https://agate-pris.gitlab.io/slides/no-more-memset/) | agate-pris | [:simple-youtube:](https://www.youtube.com/watch?v=IxPqx4ZOnFw) | + + +## talk.cpp +>talk.cpp は、動画と質疑応答による発表・議論を通して、C++ ユーザどうしが知見やアイデアを共有する、参加無料の技術イベントです。完全オンラインでの実施を前提にした、新しいスタイルの発表方式を採用しています。 + +- https://talkcpp.connpass.com/ +- 発表資料: https://scrapbox.io/talkcpp/ +- Twitter ハッシュタグ [#talkcpp](https://twitter.com/search?q=%23talkcpp&f=live) ## feature.cpp @@ -94,6 +244,7 @@ description: 国内で開催されている C++ 関連の勉強会イベント | イベント番号 | 参加者間の共有ドキュメント | |-------------------------------------------------------------------|------------------------------------------------------------------------------------------------| +| #3 [(2019-10-04)](https://cpp20survey.connpass.com/event/147002/) | [ドキュメント](https://docs.google.com/document/d/163DDT73-ccWJY8khoX2wOS6tiYYsJ2mvPdkLlIZXywk/edit) | | #2 [(2019-05-17)](https://cpp20survey.connpass.com/event/126691/) | [ドキュメント](https://docs.google.com/document/d/1t80gHDimmcltJSOZjUocApuB5ylqTKnZzX5Rkq_HY4s/edit) | | #1 [(2019-04-02)](https://cpp20survey.connpass.com/event/124051/) | [ドキュメント](https://docs.google.com/document/d/1is2E5wOYo8oHrsI4OJNLNPmSRpeX-0GyGIrqIhfSB5U/edit) | @@ -101,9 +252,21 @@ description: 国内で開催されている C++ 関連の勉強会イベント ## キャディ株式会社 C++ 勉強会 >キャディ株式会社はテクニカルアドバイザーとして江添亮氏を迎え入れ、今後隔週でC++にまつわる勉強会を実施します。基礎的な内容から発展的な内容まで、幅広くシリーズ開催していく予定ですので、C++の勉強をしている方、江添亮氏やキャディメンバーとお話したい方など気軽にいらしてください。 -| イベント番号 | 内容 | -|-------------------------------------------------------------------|------------------| -| #1 [(2019-07-30)](https://caddi.connpass.com/event/140080/) | ポインターについて | +- Twitter ハッシュタグ [#caddicpp](https://twitter.com/search?q=%23caddicpp) + +| イベント番号 | 内容 | ムービー | +|-------------------------------------------------------------------|------------------|-------------------------------------------| +| #11 [(2020-01-08)](https://caddi.connpass.com/event/160626/) | volatile、std::launder、PODやstandard layout型の歴史など | [:simple-youtube:](https://youtu.be/0d9upvmeuu4) | +| #10 [(2019-12-17)](https://caddi.connpass.com/event/158954/) | テンプレートの同一性、C++20の新機能解説 | [:simple-youtube:](https://youtu.be/3kZwwzdPR8M) | +| #9 [(2019-12-03)](https://caddi.connpass.com/event/157462/) | コンセプト(時間があれば、Three-way Comparison operator) | [:simple-youtube:](https://youtu.be/nJcWfICJwyc) | | +| #8 [(2019-11-19)](https://caddi.connpass.com/event/154653/) | C++20 の機能紹介と一時オブジェクトの寿命 | [:simple-youtube:](https://youtu.be/Gu9Y5t3uCZA) | +| #7 [(2019-10-29)](https://caddi.connpass.com/event/151541/) | type erasure の続きと expression templates | [:simple-youtube:](https://youtu.be/50J6pM5JlsU) | +| #6 [(2019-10-09)](https://caddi.connpass.com/event/150414/) | 派生と継承、Type Erasure | | +| #5 [(2019-09-25)](https://caddi.connpass.com/event/147690/) | 標準変換、オーバーロード解決、テンプレートの実引数推定 | [:simple-youtube:](https://youtu.be/bUyUDHPk4ik) | +| #4 [(2019-09-11)](https://caddi.connpass.com/event/146851/) | C++ 標準規格の用語解説 | [:simple-youtube:](https://youtu.be/OYBLK4Lwudw) | +| #3 [(2019-08-30)](https://caddi.connpass.com/event/145070/) | メタプログラミング | | +| #2 [(2019-08-21)](https://caddi.connpass.com/event/142476/) | テンプレート基礎 | [:simple-youtube:](https://youtu.be/fz8ahXzOUNE) | +| #1 [(2019-07-30)](https://caddi.connpass.com/event/140080/) | ポインターについて | [:simple-youtube:](https://youtu.be/d9VgUHghlog) | ## 札幌 C++ 勉強会 @@ -113,12 +276,6 @@ description: 国内で開催されている C++ 関連の勉強会イベント - [札幌C++勉強会/もくもく会](https://sapporocpp-mokumoku.connpass.com/) -## 大阪 C++ 読書会 ->大阪でC++に関するものを読み進める会です。 誰かが発表するといったスタイルではなく、みんなでわからないところを話し合って読んでいくスタイルの会です。 - -- https://cpp-osaka.connpass.com/ - - ## Boost. 勉強会 >Boost C++ Librariesという、C++の有名なライブラリ群を中心とした、C++全般の勉強会です。 Boostに限らず、C++全般の話、QtやOpenCVのような他のライブラリ、自分が作ったプログラムの紹介、その他C++プログラマに知っておいてもらいたいことの紹介(データ構造やアルゴリズム、イディオム、プログラムの設計やデザインパターン、他の言語での考え方やアプローチ)など、幅広いテーマを扱っています。 diff --git a/docs/libraries/boost.md b/docs/libraries/boost.md index c04d598..df80d75 100644 --- a/docs/libraries/boost.md +++ b/docs/libraries/boost.md @@ -2,47 +2,77 @@ description: Boost C++ Libraries のバージョン履歴 # Boost -| バージョン / リリースノート | リリース日 | 新しく追加されたライブラリ | -|------------------------------------------------------------------------------------------------------------------------------------|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [1.70.0](https://www.boost.org/users/history/version_1_70_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_70_0.html) | 2019-04-12 | [Outcome](https://www.boost.org/libs/outcome/), [Histogram](https://www.boost.org/libs/histogram/) | -| [1.69.0](https://www.boost.org/users/history/version_1_69_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_69_0.html) | 2018-12-12 | [Safe Numerics](https://www.boost.org/libs/safe_numerics/) | -| [1.68.0](https://www.boost.org/users/history/version_1_68_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_68_0.html) | 2018-08-09 | [YAP](https://www.boost.org/libs/yap/) | -| [1.67.0](https://www.boost.org/users/history/version_1_67_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_67_0.html) | 2018-04-14 | [Contract](https://www.boost.org/libs/contract/), [HOF](https://www.boost.org/libs/hof/) | -| [1.66.0](https://www.boost.org/users/history/version_1_66_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_66_0.html) | 2017-12-18 | [Beast](https://www.boost.org/libs/beast/), [CallableTraits](https://www.boost.org/libs/callable_traits/), [Mp11](https://www.boost.org/libs/mp11/) | -| [1.65.1](https://www.boost.org/users/history/version_1_65_1.html) / [日本語訳](https://boostjp.github.io/document/version/1_65_1.html) | 2017-09-07 | | -| [1.65.0](https://www.boost.org/users/history/version_1_65_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_65_0.html) | 2017-08-21 | [PolyCollection](https://www.boost.org/libs/poly_collection/), [Stacktrace](https://www.boost.org/libs/stacktrace/) | -| [1.64.0](https://www.boost.org/users/history/version_1_64_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_64_0.html) | 2017-04-19 | [Process](https://www.boost.org/libs/process/) | -| [1.63.0](https://www.boost.org/users/history/version_1_63_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_63_0.html) | 2016-12-26 | | -| [1.62.0](https://www.boost.org/users/history/version_1_62_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_62_0.html) | 2016-09-28 | [Fiber](https://www.boost.org/libs/fiber/), [QVM](https://www.boost.org/libs/qvm/doc/index.html) | -| [1.61.0](https://www.boost.org/users/history/version_1_61_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_61_0.html) | 2016-05-13 | [Compute](https://www.boost.org/libs/compute/), [DLL](https://www.boost.org/libs/dll/), [Hana](https://www.boost.org/libs/hana/), [Metaparse](https://www.boost.org/libs/metaparse/) | -| [1.60.0](https://www.boost.org/users/history/version_1_60_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_60_0.html) | 2015-12-17 | [VMD](https://www.boost.org/libs/vmd/) | -| [1.59.0](https://www.boost.org/users/history/version_1_59_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_59_0.html) | 2015-08-13 | [Convert](https://www.boost.org/libs/convert/), [Coroutine2](https://www.boost.org/libs/coroutine2/) | -| [1.58.0](https://www.boost.org/users/history/version_1_58_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_58_0.html) | 2015-04-17 | [Endian](https://www.boost.org/libs/endian), [Sort](https://www.boost.org/libs/sort/) | -| [1.57.0](https://www.boost.org/users/history/version_1_57_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_57_0.html) | 2014-11-03 | | -| [1.56.0](https://www.boost.org/users/history/version_1_56_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_56_0.html) | 2014-08-07 | [Align](https://www.boost.org/libs/align/), [Type_Index](https://www.boost.org/libs/type_index/) | -| [1.55.0](https://www.boost.org/users/history/version_1_55_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_55_0.html) | 2013-11-11 | [Predef](https://www.boost.org/libs/predef/) | -| [1.54.0](https://www.boost.org/users/history/version_1_54_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_54_0.html) | 2013-07-01 | [Log](https://www.boost.org/libs/log/), [TTI](https://www.boost.org/libs/tti/), [Type Erasure](https://www.boost.org/libs/type_erasure/) | -| [1.53.0](https://www.boost.org/users/history/version_1_53_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_53_0.html) | 2013-02-04 | [Atomic](https://www.boost.org/libs/atomic/), [Coroutine](https://www.boost.org/libs/coroutine/), [Lockfree](https://www.boost.org/libs/lockfree/), [Multiprecision](https://www.boost.org/libs/multiprecision/), [Odeint](https://www.boost.org/libs/numeric/odeint/) | -| [1.52.0](https://www.boost.org/users/history/version_1_52_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_52_0.html) | 2012-11-05 | | -| [1.51.0](https://www.boost.org/users/history/version_1_51_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_51_0.html) | 2012-08-20 | [Context](https://www.boost.org/libs/context/) | -| [1.50.0](https://www.boost.org/users/history/version_1_50_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_50_0.html) | 2012-06-28 | [Algorithm](https://www.boost.org/libs/algorithm/), [Functional/OverloadedFunction](https://www.boost.org/libs/functional/overloaded_function/),
[LocalFunction](https://www.boost.org/libs/local_function/), [Utility/IdentityType](https://www.boost.org/libs/utility/identity_type/) | -| [1.49.0](https://www.boost.org/users/history/version_1_49_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_49_0.html) | 2012-02-24 | [Heap](https://www.boost.org/libs/heap/index.html) | -| [1.48.0](https://www.boost.org/users/history/version_1_48_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_48_0.html) | 2011-11-15 | [Container](https://www.boost.org/libs/container/index.html), [Locale](https://www.boost.org/libs/locale/index.html), [Move](https://www.boost.org/doc/html/move.html) | -| [1.47.0](https://www.boost.org/users/history/version_1_47_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_47_0.html) | 2011-07-11 | [Chrono](https://www.boost.org/libs/chrono/index.html), [Geometry](https://www.boost.org/libs/geometry/index.html), [Phoenix](https://www.boost.org/libs/phoenix/index.html), [Ratio](https://www.boost.org/libs/ratio/index.html) | -| [1.46.1](https://www.boost.org/users/history/version_1_46_1.html) / [日本語訳](https://boostjp.github.io/document/version/1_46_1.html) | 2011-03-12 | | -| [1.46.0](https://www.boost.org/users/history/version_1_46_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_46_0.html) | 2011-02-21 | [Icl](https://www.boost.org/libs/icl/index.html) | -| [1.45.0](https://www.boost.org/users/history/version_1_45_0.html) / [日本語訳](https://boostjp.github.io/document/version/1_45_0.html) | 2010-11-19 | | -| [1.44.0](https://www.boost.org/users/history/version_1_44_0.html) | 2010-08-13 | [Meta State Machine](https://www.boost.org/libs/msm/index.html), [Polygon](https://www.boost.org/libs/polygon/index.html) | -| [1.43.0](https://www.boost.org/users/history/version_1_43_0.html) | 2010-05-06 | [Functional/factory](https://www.boost.org/libs/functional/factory/index.html), [Functional/forward](https://www.boost.org/libs/functional/forward/index.html) | -| [1.42.0](https://www.boost.org/users/history/version_1_42_0.html) | 2010-02-02 | [Uuid](https://www.boost.org/libs/uuid/index.html) | -| [1.41.0](https://www.boost.org/users/history/version_1_41_0.html) | 2009-11-17 | [Property Tree](https://www.boost.org/libs/property_tree/index.html) | -| [1.40.0](https://www.boost.org/users/history/version_1_40_0.html) | 2009-08-27 | | -| [1.39.0](https://www.boost.org/users/history/version_1_39_0.html) | 2009-05-02 | [Signals2](https://www.boost.org/libs/signals2/index.html) | -| [1.38.0](https://www.boost.org/users/history/version_1_38_0.html) | 2009-02-08 | [Flyweight](https://www.boost.org/libs/flyweight/index.html), [ScopeExit](https://www.boost.org/libs/scope_exit/doc/html/index.html), [Swap](https://www.boost.org/libs/utility/swap.html) | -| [1.37.0](https://www.boost.org/users/history/version_1_37_0.html) | 2008-11-03 | [Proto](https://www.boost.org/libs/proto/index.html) | -| [1.36.0](https://www.boost.org/users/history/version_1_36_0.html) | 2008-08-14 | [Accumulators](https://www.boost.org/libs/accumulators/index.html), [Exception](https://www.boost.org/libs/exception/doc/boost-exception.html), [Units](https://www.boost.org/libs/units/index.html), [Unordered](https://www.boost.org/libs/unordered/index.html) | -| [1.35.0](https://www.boost.org/users/history/version_1_35_0.html) | 2008-03-29 | [Asio](https://www.boost.org/libs/asio/index.html), [Bimap](https://www.boost.org/libs/bimap/index.html), [Circular Buffer](https://www.boost.org/libs/circular_buffer/index.html), [Function Types](https://www.boost.org/libs/function_types/index.html), [Fusion](https://www.boost.org/libs/fusion/index.html),
[GIL](https://www.boost.org/libs/gil/doc/index.html), [Interprocess](https://www.boost.org/libs/interprocess/index.html), [Intrusive](https://www.boost.org/libs/intrusive/index.html), [Math/Special Functions](https://www.boost.org/libs/math/doc/sf_and_dist/html/index.html),
[Math/Statistical Distributions](https://www.boost.org/libs/math/doc/sf_and_dist/html/index.html), [MPI](https://www.boost.org/doc/html/mpi.html), [System](https://www.boost.org/libs/system/index.html) | -| … | … | … | +| リリースノート | リリース日 | 新しく追加されたライブラリ | +|------------------------------------------------------------------------------------------------------------------------------------|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| [1.90.0](https://www.boost.org/releases/1.90.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_90_0.html){:target="_blank"} | 2025-12-10 | [OpenMethod](https://www.boost.org/libs/openmethod){:target="_blank"} | +| [1.89.0](https://www.boost.org/releases/1.89.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_89_0.html){:target="_blank"} | 2025-08-06 | [Bloom](https://www.boost.org/libs/bloom/){:target="_blank"} | +| [1.88.0](https://www.boost.org/releases/1.88.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_88_0.html){:target="_blank"} | 2025-04-03 | [Hash2](https://www.boost.org/libs/hash2/){:target="_blank"}, [MQTT5](https://www.boost.org/libs/mqtt5/){:target="_blank"} | +| [1.87.0](https://www.boost.org/releases/1.87.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_87_0.html){:target="_blank"} | 2024-12-12 | [Parser](https://www.boost.org/libs/parser/){:target="_blank"} | +| [1.86.0](https://www.boost.org/releases/1.86.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_86_0.html){:target="_blank"} | 2024-08-07 | | +| [1.85.0](https://www.boost.org/releases/1.85.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_85_0.html){:target="_blank"} | 2024-04-11 | [Charconv](https://www.boost.org/libs/charconv/){:target="_blank"}, [Scope](https://www.boost.org/libs/scope/){:target="_blank"} | +| [1.84.0](https://www.boost.org/releases/1.84.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_84_0.html){:target="_blank"} | 2023-12-06 | [Cobalt](https://www.boost.org/libs/cobalt/){:target="_blank"}, [Redis](https://www.boost.org/libs/redis/){:target="_blank"} | +| [1.83.0](https://www.boost.org/releases/1.83.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_83_0.html){:target="_blank"} | 2023-08-11 | [Compat](https://www.boost.org/libs/compat/){:target="_blank"} | +| [1.82.0](https://www.boost.org/releases/1.82.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_82_0.html){:target="_blank"} | 2023-04-14 | [Mysql](https://www.boost.org/libs/mysql/){:target="_blank"} | +| [1.81.0](https://www.boost.org/releases/1.81.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_81_0.html){:target="_blank"} | 2022-12-14 | [URL](https://www.boost.org/libs/url/){:target="_blank"} | +| [1.80.0](https://www.boost.org/releases/1.80.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_80_0.html){:target="_blank"} | 2022-08-03 | | +| [1.79.0](https://www.boost.org/releases/1.79.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_79_0.html){:target="_blank"} | 2022-04-13 | | +| [1.78.0](https://www.boost.org/releases/1.78.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_78_0.html){:target="_blank"} | 2021-12-08 | | +| [1.77.0](https://www.boost.org/releases/1.77.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_77_0.html){:target="_blank"} | 2021-08-11 | [Describe](https://www.boost.org/libs/describe/){:target="_blank"}, [Lambda2](https://www.boost.org/libs/lambda2/){:target="_blank"} | +| [1.76.0](https://www.boost.org/releases/1.76.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_76_0.html){:target="_blank"} | 2021-04-16 | | +| [1.75.0](https://www.boost.org/releases/1.75.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_75_0.html){:target="_blank"} | 2020-12-11 | [JSON](https://www.boost.org/libs/json/){:target="_blank"}, [LEAF](https://www.boost.org/libs/leaf/){:target="_blank"}, [PFR](https://www.boost.org/libs/pfr/){:target="_blank"} | +| [1.74.0](https://www.boost.org/releases/1.74.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_74_0.html){:target="_blank"} | 2020-08-14 | [STLInterfaces](https://www.boost.org/libs/stl_interfaces/){:target="_blank"} | +| [1.73.0](https://www.boost.org/releases/1.73.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_73_0.html){:target="_blank"} | 2020-04-28 | [Nowide](https://www.boost.org/libs/nowide/){:target="_blank"}, [StaticString](https://www.boost.org/libs/static_string/){:target="_blank"} | +| [1.72.0](https://www.boost.org/releases/1.72.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_72_0.html){:target="_blank"} | 2019-12-11 | | +| [1.71.0](https://www.boost.org/releases/1.71.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_71_0.html){:target="_blank"} | 2019-08-19 | [Variant2](https://www.boost.org/libs/variant2/){:target="_blank"} | +| [1.70.0](https://www.boost.org/releases/1.70.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_70_0.html){:target="_blank"} | 2019-04-12 | [Outcome](https://www.boost.org/libs/outcome/){:target="_blank"}, [Histogram](https://www.boost.org/libs/histogram/){:target="_blank"} | +| [1.69.0](https://www.boost.org/releases/1.69.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_69_0.html){:target="_blank"} | 2018-12-12 | [Safe Numerics](https://www.boost.org/libs/safe_numerics/){:target="_blank"} | +| [1.68.0](https://www.boost.org/releases/1.68.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_68_0.html){:target="_blank"} | 2018-08-09 | [YAP](https://www.boost.org/libs/yap/){:target="_blank"} | +| [1.67.0](https://www.boost.org/releases/1.67.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_67_0.html){:target="_blank"} | 2018-04-14 | [Contract](https://www.boost.org/libs/contract/){:target="_blank"}, [HOF](https://www.boost.org/libs/hof/){:target="_blank"} | +| [1.66.0](https://www.boost.org/releases/1.66.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_66_0.html){:target="_blank"} | 2017-12-18 | [Beast](https://www.boost.org/libs/beast/){:target="_blank"}, [CallableTraits](https://www.boost.org/libs/callable_traits/){:target="_blank"}, [Mp11](https://www.boost.org/libs/mp11/){:target="_blank"} | +| [1.65.1](https://www.boost.org/releases/1.65.1/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_65_1.html){:target="_blank"} | 2017-09-07 | | +| [1.65.0](https://www.boost.org/releases/1.65.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_65_0.html){:target="_blank"} | 2017-08-21 | [PolyCollection](https://www.boost.org/libs/poly_collection/){:target="_blank"}, [Stacktrace](https://www.boost.org/libs/stacktrace/){:target="_blank"} | +| [1.64.0](https://www.boost.org/releases/1.64.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_64_0.html){:target="_blank"} | 2017-04-19 | [Process](https://www.boost.org/libs/process/){:target="_blank"} | +| [1.63.0](https://www.boost.org/releases/1.63.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_63_0.html){:target="_blank"} | 2016-12-26 | | +| [1.62.0](https://www.boost.org/releases/1.62.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_62_0.html){:target="_blank"} | 2016-09-28 | [Fiber](https://www.boost.org/libs/fiber/){:target="_blank"}, [QVM](https://www.boost.org/libs/qvm/doc/index.html){:target="_blank"} | +| [1.61.0](https://www.boost.org/releases/1.61.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_61_0.html){:target="_blank"} | 2016-05-13 | [Compute](https://www.boost.org/libs/compute/){:target="_blank"}, [DLL](https://www.boost.org/libs/dll/){:target="_blank"}, [Hana](https://www.boost.org/libs/hana/){:target="_blank"}, [Metaparse](https://www.boost.org/libs/metaparse/){:target="_blank"} | +| [1.60.0](https://www.boost.org/releases/1.60.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_60_0.html){:target="_blank"} | 2015-12-17 | [VMD](https://www.boost.org/libs/vmd/){:target="_blank"} | +| [1.59.0](https://www.boost.org/releases/1.59.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_59_0.html){:target="_blank"} | 2015-08-13 | [Convert](https://www.boost.org/libs/convert/){:target="_blank"}, [Coroutine2](https://www.boost.org/libs/coroutine2/){:target="_blank"} | +| [1.58.0](https://www.boost.org/releases/1.58.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_58_0.html){:target="_blank"} | 2015-04-17 | [Endian](https://www.boost.org/libs/endian), [Sort](https://www.boost.org/libs/sort/){:target="_blank"} | +| [1.57.0](https://www.boost.org/releases/1.57.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_57_0.html){:target="_blank"} | 2014-11-03 | | +| [1.56.0](https://www.boost.org/releases/1.56.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_56_0.html){:target="_blank"} | 2014-08-07 | [Align](https://www.boost.org/libs/align/){:target="_blank"}, [Type_Index](https://www.boost.org/libs/type_index/){:target="_blank"} | +| [1.55.0](https://www.boost.org/releases/1.55.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_55_0.html){:target="_blank"} | 2013-11-11 | [Predef](https://www.boost.org/libs/predef/){:target="_blank"} | +| [1.54.0](https://www.boost.org/releases/1.54.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_54_0.html){:target="_blank"} | 2013-07-01 | [Log](https://www.boost.org/libs/log/){:target="_blank"}, [TTI](https://www.boost.org/libs/tti/){:target="_blank"}, [Type Erasure](https://www.boost.org/libs/type_erasure/){:target="_blank"} | +| [1.53.0](https://www.boost.org/releases/1.53.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_53_0.html){:target="_blank"} | 2013-02-04 | [Atomic](https://www.boost.org/libs/atomic/){:target="_blank"}, [Coroutine](https://www.boost.org/libs/coroutine/){:target="_blank"}, [Lockfree](https://www.boost.org/libs/lockfree/){:target="_blank"}, [Multiprecision](https://www.boost.org/libs/multiprecision/){:target="_blank"}, [Odeint](https://www.boost.org/libs/numeric/odeint/){:target="_blank"} | +| [1.52.0](https://www.boost.org/releases/1.52.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_52_0.html){:target="_blank"} | 2012-11-05 | | +| [1.51.0](https://www.boost.org/releases/1.51.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_51_0.html){:target="_blank"} | 2012-08-20 | [Context](https://www.boost.org/libs/context/){:target="_blank"} | +| [1.50.0](https://www.boost.org/releases/1.50.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_50_0.html){:target="_blank"} | 2012-06-28 | [Algorithm](https://www.boost.org/libs/algorithm/){:target="_blank"}, [Functional/OverloadedFunction](https://www.boost.org/libs/functional/overloaded_function/){:target="_blank"},
[LocalFunction](https://www.boost.org/libs/local_function/){:target="_blank"}, [Utility/IdentityType](https://www.boost.org/libs/utility/identity_type/){:target="_blank"} | +| [1.49.0](https://www.boost.org/releases/1.49.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_49_0.html){:target="_blank"} | 2012-02-24 | [Heap](https://www.boost.org/libs/heap/index.html){:target="_blank"} | +| [1.48.0](https://www.boost.org/releases/1.48.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_48_0.html){:target="_blank"} | 2011-11-15 | [Container](https://www.boost.org/libs/container/index.html){:target="_blank"}, [Locale](https://www.boost.org/libs/locale/index.html){:target="_blank"}, [Move](https://www.boost.org/doc/html/move.html){:target="_blank"} | +| [1.47.0](https://www.boost.org/releases/1.47.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_47_0.html){:target="_blank"} | 2011-07-11 | [Chrono](https://www.boost.org/libs/chrono/index.html){:target="_blank"}, [Geometry](https://www.boost.org/libs/geometry/index.html){:target="_blank"}, [Phoenix](https://www.boost.org/libs/phoenix/index.html){:target="_blank"}, [Ratio](https://www.boost.org/libs/ratio/index.html){:target="_blank"} | +| [1.46.1](https://www.boost.org/releases/1.46.1/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_46_1.html){:target="_blank"} | 2011-03-12 | | +| [1.46.0](https://www.boost.org/releases/1.46.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_46_0.html){:target="_blank"} | 2011-02-21 | [Icl](https://www.boost.org/libs/icl/index.html){:target="_blank"} | +| [1.45.0](https://www.boost.org/releases/1.45.0/){:target="_blank"} / [日本語訳](https://boostjp.github.io/document/version/1_45_0.html){:target="_blank"} | 2010-11-19 | | +| [1.44.0](https://www.boost.org/releases/1.44.0/){:target="_blank"} | 2010-08-13 | [Meta State Machine](https://www.boost.org/libs/msm/index.html){:target="_blank"}, [Polygon](https://www.boost.org/libs/polygon/index.html){:target="_blank"} | +| [1.43.0](https://www.boost.org/releases/1.43.0/){:target="_blank"} | 2010-05-06 | [Functional/factory](https://www.boost.org/libs/functional/factory/index.html){:target="_blank"}, [Functional/forward](https://www.boost.org/libs/functional/forward/index.html){:target="_blank"} | +| [1.42.0](https://www.boost.org/releases/1.42.0/){:target="_blank"} | 2010-02-02 | [Uuid](https://www.boost.org/libs/uuid/index.html){:target="_blank"} | +| [1.41.0](https://www.boost.org/releases/1.41.0/){:target="_blank"} | 2009-11-17 | [Property Tree](https://www.boost.org/libs/property_tree/index.html){:target="_blank"} | +| [1.40.0](https://www.boost.org/releases/1.40.0/){:target="_blank"} | 2009-08-27 | | +| [1.39.0](https://www.boost.org/releases/1.39.0/){:target="_blank"} | 2009-05-02 | [Signals2](https://www.boost.org/libs/signals2/index.html){:target="_blank"} | +| [1.38.0](https://www.boost.org/releases/1.38.0/){:target="_blank"} | 2009-02-08 | [Flyweight](https://www.boost.org/libs/flyweight/index.html){:target="_blank"}, [ScopeExit](https://www.boost.org/libs/scope_exit/doc/html/index.html){:target="_blank"}, [Swap](https://www.boost.org/libs/utility/swap.html){:target="_blank"} | +| [1.37.0](https://www.boost.org/releases/1.37.0/){:target="_blank"} | 2008-11-03 | [Proto](https://www.boost.org/libs/proto/index.html){:target="_blank"} | +| [1.36.0](https://www.boost.org/releases/1.36.0/){:target="_blank"} | 2008-08-14 | [Accumulators](https://www.boost.org/libs/accumulators/index.html){:target="_blank"}, [Exception](https://www.boost.org/libs/exception/doc/boost-exception.html){:target="_blank"}, [Units](https://www.boost.org/libs/units/index.html){:target="_blank"}, [Unordered](https://www.boost.org/libs/unordered/index.html){:target="_blank"} | +| [1.35.0](https://www.boost.org/releases/1.35.0/){:target="_blank"} | 2008-03-29 | [Asio](https://www.boost.org/libs/asio/index.html){:target="_blank"}, [Bimap](https://www.boost.org/libs/bimap/index.html){:target="_blank"}, [Circular Buffer](https://www.boost.org/libs/circular_buffer/index.html){:target="_blank"}, [Function Types](https://www.boost.org/libs/function_types/index.html){:target="_blank"}, [Fusion](https://www.boost.org/libs/fusion/index.html){:target="_blank"},
[GIL](https://www.boost.org/libs/gil/doc/index.html){:target="_blank"}, [Interprocess](https://www.boost.org/libs/interprocess/index.html){:target="_blank"}, [Intrusive](https://www.boost.org/libs/intrusive/index.html){:target="_blank"}, [Math/Special Functions](https://www.boost.org/libs/math/doc/sf_and_dist/html/index.html){:target="_blank"},
[Math/Statistical Distributions](https://www.boost.org/libs/math/doc/sf_and_dist/html/index.html){:target="_blank"}, [MPI](https://www.boost.org/doc/html/mpi.html){:target="_blank"}, [System](https://www.boost.org/libs/system/index.html){:target="_blank"} | +| [1.34.1](https://www.boost.org/releases/1.34.1/){:target="_blank"} | 2007-07-24 | | +| [1.34.0](https://www.boost.org/releases/1.34.0/){:target="_blank"} | 2007-05-12 | [Foreach](https://www.boost.org/libs/foreach/index.html){:target="_blank"}, [Statechart](https://www.boost.org/libs/statechart/index.html){:target="_blank"}, [TR1 (removed)](https://www.boost.org/doc/libs/1_64_0/doc/html/boost_tr1.html){:target="_blank"}, [Typeof](https://www.boost.org/libs/typeof/index.html){:target="_blank"}, [Xpressive](https://www.boost.org/libs/xpressive/index.html){:target="_blank"} | +| [1.33.1](https://www.boost.org/releases/1.33.1/){:target="_blank"} | 2006-12-05 | | +| [1.33.0](https://www.boost.org/releases/1.33.0/){:target="_blank"} | 2005-08-11 | [Iostreams](https://www.boost.org/libs/iostreams/index.html){:target="_blank"}, [Functional/Hash](https://www.boost.org/doc/html/hash.html){:target="_blank"}, [Parameter](https://www.boost.org/libs/parameter/index.html){:target="_blank"}, [Pointer Container](https://www.boost.org/libs/ptr_container/index.html){:target="_blank"}, [Wave](https://www.boost.org/libs/wave/index.html){:target="_blank"} | +| [1.32.0](https://www.boost.org/releases/1.32.0/){:target="_blank"} | 2004-11-19 | [Assignment](https://www.boost.org/libs/assign/index.html){:target="_blank"}, [Minmax](https://www.boost.org/libs/algorithm/minmax/index.html){:target="_blank"}, [Multi-index Containers](https://www.boost.org/libs/multi_index/index.html){:target="_blank"},
[Numeric Conversion](https://www.boost.org/libs/numeric/conversion/index.html){:target="_blank"}, [Program Options](https://www.boost.org/libs/program_options/index.html){:target="_blank"}, [Range](https://www.boost.org/libs/range/index.html){:target="_blank"}, [Serialization](https://www.boost.org/libs/serialization/index.html){:target="_blank"},
[String Algorithms](https://www.boost.org/doc/html/string_algo.html){:target="_blank"}, [Tribool](https://www.boost.org/doc/html/boost/logic/tribool.html){:target="_blank"} | +| [1.31.0](https://www.boost.org/releases/1.31.0/){:target="_blank"} | 2004-01-26 | [enable_if](https://www.boost.org/libs/core/doc/html/core/enable_if.html){:target="_blank"}, [Variant](https://www.boost.org/libs/variant/index.html){:target="_blank"} | +| [1.30.2](https://www.boost.org/releases/1.30.2/){:target="_blank"} | 2003-08-19 | | +| [1.30.1](https://www.boost.org/releases/1.30.1/){:target="_blank"} | 2003-08-04 | | +| [1.30.0](https://www.boost.org/releases/1.30.0/){:target="_blank"} | 2003-03-19 | [Filesystem](https://www.boost.org/libs/filesystem/index.html){:target="_blank"}, [Optional](https://www.boost.org/libs/optional/doc/html/index.html){:target="_blank"}, [Interval](https://www.boost.org/libs/numeric/interval/index.html){:target="_blank"}, [MPL](https://www.boost.org/libs/mpl/index.html){:target="_blank"}, [Spirit](https://www.boost.org/libs/spirit/index.html){:target="_blank"} | +| [1.29.0](https://www.boost.org/releases/1.29.0/){:target="_blank"} | 2002-10-10 | [Date-Time](https://www.boost.org/libs/date_time/doc/index.html){:target="_blank"}, [Dynamic Bitset](https://www.boost.org/libs/dynamic_bitset/dynamic_bitset.html){:target="_blank"}, [Format](https://www.boost.org/libs/format/index.html){:target="_blank"} | +| … | … | … | ## 参考文献 - Boost Version History diff --git a/docs/libraries/concurrency.md b/docs/libraries/concurrency.md new file mode 100644 index 0000000..666b02a --- /dev/null +++ b/docs/libraries/concurrency.md @@ -0,0 +1,17 @@ +description: C++ の並行・並列ライブラリの紹介 + +# 並行・並列 + +## マルチタスクスケジューリング + +- [Cpp-Taskflow](https://github.com/cpp-taskflow/cpp-taskflow) MIT + - C++17 以上でモダンな API でタスクフローが組める + - work-stealing スケジューラによる高効率なタスクスケジューリング + - `chrome://tracing` で実行状況をモニタできる + - タスクフローをグラフ出力できる + +## コルーチン + +- [cppcoro](https://github.com/lewissbaker/cppcoro) MIT + - C++20 コルーチンの細かな制御 / 拡張ポイントを担当するライブラリ部分の実装 + - [C++20 のコルーチン for アプリケーション - Qiita](https://qiita.com/Fuyutsubaki/items/a4c9921587ce53d95e55) diff --git a/docs/libraries/math.md b/docs/libraries/math.md new file mode 100644 index 0000000..e559d6d --- /dev/null +++ b/docs/libraries/math.md @@ -0,0 +1,8 @@ +description: C++ の数学ライブラリの紹介 + +# 数学 + +## 固定小数点数 + +- [Compositional Numeric Library](https://github.com/johnmcfarlane/cnl) BSL 1.0 +- [fpm](https://github.com/MikeLankamp/fpm) MIT diff --git a/docs/libraries/testing.md b/docs/libraries/testing.md new file mode 100644 index 0000000..c19a6ee --- /dev/null +++ b/docs/libraries/testing.md @@ -0,0 +1,13 @@ +description: C++ のテストフレームワークの紹介 + +# 単体テストフレームワーク + +- [googletest](https://github.com/google/googletest) BSD 3-Clause +- [Catch](https://github.com/catchorg/Catch2) BSL 1.0 + - C++11 以上 + - シングルヘッダで外部依存ライブラリなし + - 簡単に使い始められるインターフェース +- [doctest](https://github.com/onqtam/doctest) MIT + - C++11 以上 + - シングルヘッダで外部依存ライブラリなし + - ヘッダのコンパイル時間が非常に短く([ベンチマーク](https://github.com/onqtam/doctest/blob/master/doc/markdown/benchmarks.md))、テスト実行のイテレーションを速く回せるのが売り diff --git a/docs/libraries/text-data.md b/docs/libraries/text-data.md index f7a3477..c419477 100644 --- a/docs/libraries/text-data.md +++ b/docs/libraries/text-data.md @@ -18,6 +18,7 @@ description: C++ のテキストデータライブラリの紹介 - [RapidJSON](https://github.com/Tencent/rapidjson/) MIT - [sajson](https://github.com/chadaustin/sajson) MIT - [simdjson](https://github.com/lemire/simdjson) Apache License 2.0 +- [Boost.JSON](https://www.boost.org/libs/json/) BSL-1.0 #### ベンチマーク - [Native JSON Benchmark](https://github.com/miloyip/nativejson-benchmark) @@ -29,7 +30,8 @@ description: C++ のテキストデータライブラリの紹介 ## XML -- [Boost.PropertyTree](https://github.com/boostorg/property_tree) BSL 1.0 (内部実装に RapidXml を使用) +- [Boost.PropertyTree](https://github.com/boostorg/property_tree) BSL 1.0 + - 内部実装に RapidXml を使用 - [pugixml](https://github.com/zeux/pugixml) MIT - [RapidXml](http://rapidxml.sourceforge.net/) BSL 1.0 - [TinyXML-2](https://github.com/leethomason/tinyxml2) zlib diff --git a/docs/standardization/cpp20.md b/docs/standardization/cpp20.md index c125d7e..af3ad43 100644 --- a/docs/standardization/cpp20.md +++ b/docs/standardization/cpp20.md @@ -2,23 +2,27 @@ description: C++20 の新しい言語機能と標準ライブラリ機能の解 # C++20 の新機能 -現在、執筆作業中です(完成度 約 25%)。 -一覧は [処理系の対応状況](https://cppmap.github.io/standardization/status/) から C++20 のページを参照してください。 +!!! Info + 項目追加・執筆作業中です(完成度 約 35%) + +C++20 規格における新機能・仕様変更を解説します。 ## 言語機能 ### ビットフィールドにデフォルトの初期値を設定可能に [(P0683R1)](http://wg21.link/p0683r1) +ビットフィールドにおけるビット幅の指定に続いて、`=` 演算子または `{}` 初期化子を使って初期化式を記述できるようになります。 + ```C++ #include -enum class Terrain +enum class Terrain : unsigned char { Open, Forest, Hill, Mountain, Desert, Tundra, River, Ocean }; struct Tile { - unsigned int height : 4 = 1; // デフォルト値を 1 に + unsigned char height : 4 = 1; // デフォルト値を 1 に Terrain terrain : 3 = Terrain::Open; // デフォルト値を明示的に Terrain::Open に bool passable : 1 = true; // デフォルト値を true に }; @@ -28,10 +32,10 @@ int main() std::cout << std::boolalpha; Tile tile1; - std::cout << tile1.height << ", " << static_cast(tile1.terrain) << ", " << tile1.passable << '\n'; + std::cout << static_cast(tile1.height) << ", " << static_cast(tile1.terrain) << ", " << tile1.passable << '\n'; Tile tile2{ 15, Terrain::Mountain, false }; - std::cout << tile2.height << ", " << static_cast(tile2.terrain) << ", " << tile2.passable << '\n'; + std::cout << static_cast(tile2.height) << ", " << static_cast(tile2.terrain) << ", " << tile2.passable << '\n'; } ``` ``` @@ -143,66 +147,69 @@ int main() ### 型名であることが明らかな文脈で `typename` を省略可能に [(P0634R3)](https://wg21.link/P0634R3) C++17 で依存名が型である場合に `typename` を付けないのは、派生クラス定義時の基底クラスの指定と、初期化子リストでの基底クラスの指定のみでした(厳密にはこの 2 つには `typename` を付けられません)。C++20 では、型名しか使えないさらにいくつかの文脈で `typename` が省略可能になります。次のサンプルコードの左右タブで比較できます。 -```C++ tab="C++17" -#include -#include +=== "C++17" -template -struct S : T::value_type // 派生クラス定義時の基底クラスの指定 -{ - using value_type = typename T::value_type; + ```C++ + #include + #include + + template + struct S : T::value_type // 派生クラス定義時の基底クラスの指定 + { + using value_type = typename T::value_type; - S() - : T::value_type() {} // 初期化子リストでの基底クラスの指定 + S() + : T::value_type() {} // 初期化子リストでの基底クラスの指定 - typename T::size_type max_size() const; + typename T::size_type max_size() const; - auto data()->typename T::pointer; + auto data()->typename T::pointer; - auto min_size() const + auto min_size() const + { + return static_cast(0); + } + }; + + template typename T::size_type MaxSize(); + + int main() { - return static_cast(0); + S> s; } -}; + ``` -template typename T::size_type MaxSize(); +=== "C++20" -int main() -{ - S> s; -} -``` + ```C++ + #include + #include -```C++ tab="C++20" -#include -#include + template // OK + struct S : T::value_type // 派生クラス定義時の基底クラスの指定 + { + using value_type = T::value_type; // OK -template // OK -struct S : T::value_type // 派生クラス定義時の基底クラスの指定 -{ - using value_type = T::value_type; // OK + S() + : T::value_type() {} // 初期化子リストでの基底クラスの指定 - S() - : T::value_type() {} // 初期化子リストでの基底クラスの指定 + T::size_type max_size() const; // OK - T::size_type max_size() const; // OK + auto data()->T::pointer; // OK - auto data()->T::pointer; // OK + auto min_size() const + { + return static_cast(0); // OK + } + }; + + template T::size_type MaxSize(); // OK - auto min_size() const + int main() { - return static_cast(0); // OK + S> s; } -}; - -template T::size_type MaxSize(); // OK - -int main() -{ - S> s; -} - -``` + ``` ### 定数式での仮想関数呼び出しが可能に [(P1064R0)](https://wg21.link/P1064) @@ -394,6 +401,388 @@ int main() ``` +### 添字式にかかるコンマ演算子の使用を deprecated に [(P1161R3)](https://wg21.link/P1161R3) +これまで `array[x, y]` というコードでは、コンマ演算子の作用で `y` が添字演算の引数として渡されました。しかし、この挙動は紛らわしく、将来の C++ 標準ライブラリに多次元配列クラスが実装されたとき、添字演算子を複数の引数に対応させるような規格を追加するうえでの障壁にもなります。そのため、C++20 から、`array[(x, y)]` のように括弧を使用する場合をのぞき、添字式にかかるコンマ演算子の使用が deprecated になります。古いコードで deprecated な書き方をしていた場合、前述のように `()` を付けることで、コードの挙動に影響を与えずに移植が可能です。 + +```C++ +#include + +int main() +{ + std::vector v(10); + + int index = 0; + + v[++index, 0] = -1; // C++17 まで OK, C++20 から deprecated + + v[(++index, 0)] = -1; // OK +} +``` + + +### スコープ付き列挙型に対する using 宣言ができるように [(P1099R5)](http://wg21.link/p1099r5) +これまでは、enum class のスコープ解決を省略する方法が無く、次のような `switch` で、列挙型の名前が何度も登場するようなコードを書く必要があり、読みにくく、長い列挙型の名前が避けられる原因になっていました。 +```C++ +#include +#include + +enum class Terrain +{ + Open, Mountain, River, Ocean +}; + +constexpr std::string_view ToString(Terrain terrain) +{ + using namespace std::string_view_literals; + + switch (terrain) + { + case Terrain::Open: return "Open"sv; + case Terrain::Mountain: return "Mountain"sv; + case Terrain::River: return "River"sv; + case Terrain::Ocean: return "Ocean"sv; + default: return ""sv; + } +} + +int main() +{ + std::cout << ToString(Terrain::Mountain); +} +``` +C++20 では `using` 宣言を拡張し、`using Terrain::Open;` で `Open` をエイリアスとして使えるようになります。また `using enum` 宣言という新しい仕組みにより、`using enum Terrain;` で `Terrain` がローカルスコープに導入され、スコープ解決演算子を使わずにその列挙子を使えるようになります。 +```C++ +enum class Terrain +{ + Open, Mountain, River, Ocean +}; + +constexpr std::string_view ToString(Terrain terrain) +{ + using namespace std::string_view_literals; + + switch (terrain) + { + using enum Terrain; // using enum 宣言で、列挙型の名前 Terrain をローカルスコープに導入 + case Open: return "Open"sv; + case Mountain: return "Mountain"sv; + case River: return "River"sv; + case Ocean: return "Ocean"sv; + default: return ""sv; + } +} + +int main() +{ + using Terrain::Mountain; // using 宣言で、列挙子 Mountain をローカルスコープに導入 + std::cout << ToString(Mountain); +} +``` +なお、次のように複数の `using` 宣言によって名前の衝突が起こる場合はコンパイルエラーになります。 +```C++ +#include +#include + +enum class Terrain +{ + Open, Mountain, River, Ocean +}; + +enum class State +{ + Open, Closed +}; + +int main() +{ + using enum Terrain; // OK + using enum State; // コンパイルエラー: Terrain::Open と State::Open の名前が衝突 +} +``` + + +### コンストラクタに `[[nodiscard]]` が使えるように [(P1771R1)](http://wg21.link/p1771r1) +C++17 で `[[nodiscard]]` が導入された際、仕様ではコンストラクタを対象としていませんでした(ただし、GCC では警告を出しつつもコンストラクタに付けた `[[nodiscard]]` をチェックしていました)。コンストラクタの呼び出しによって作成された一時オブジェクトが意図せず無視されたときに警告を出せると、ユーザの間違いを減らせます。そこで、コンストラクタにも `[[nodiscard]]` 属性を付けられるよう、C++17 向けの規格にさかのぼって仕様が修正され、C++20 および、この変更に対応した C++17 コンパイラで新仕様を利用できるようになります。なお、デストラクタを定義していた場合でも警告は消えません。 +```C++ +struct Circle +{ + double x, y, r; + + Circle() = default; + + [[nodiscard]] constexpr Circle(double _x, double _y, double _r) noexcept + : x(_x), y(_y), r(_r) {} + + void draw() const { /* ... */ } +}; + +int main() +{ + Circle(200, 300, 50); // warning: nodiscard 属性のコンストラクタで作成された一時オブジェクトを無視 + + Circle(400, 300, 50).draw(); +} +``` + + +### ネストした名前空間定義で `inline namespace` を使えるように [(P1094R2)](http://wg21.link/p1094r2) + +C++17 でネストした名前空間定義が導入されましたが、その中では `inline namespace` を使うことができず、`inline namespace` が `namespace` 内にある次のようなケースで恩恵を受けられませんでした。C++20 からはネストした名前空間定義の中で `inline` を使えるようになります。 + +=== "C++17" + + ```C++ + #include + + namespace mylib::v1::util + { + constexpr int GetValue() { return 1; } + } + + namespace mylib + { + inline namespace v2 + { + namespace util + { + constexpr int GetValue() { return 2; } + } + } + } + + int main() + { + std::cout << mylib::v1::util::GetValue() << '\n'; + std::cout << mylib::v2::util::GetValue() << '\n'; + std::cout << mylib::util::GetValue() << '\n'; // v2 + } + ``` + +=== "C++20" + + ```C++ + #include + + namespace mylib::v1::util + { + constexpr int GetValue() { return 1; } + } + + namespace mylib::inline v2::util + { + constexpr int GetValue() { return 2; } + } + + int main() + { + std::cout << mylib::v1::util::GetValue() << '\n'; + std::cout << mylib::v2::util::GetValue() << '\n'; + std::cout << mylib::util::GetValue() << '\n'; // v2 + } + ``` + + +### 本来アクセス可能な private メンバに構造化束縛ではアクセスできなかった仕様を修正 [(P0969R0)](https://wg21.link/P0969R0) +メンバ関数内で自身の `private` メンバにアクセスすることや、`friend` 指定された関数で該当クラスの `private` メンバ変数にアクセスすることは通常可能ですが、C++17 の構造化束縛はクラスの `public` メンバにしかバインドできないという規格文面の制約があり、次のようなケースで一貫性がありませんでした。この制約を課す合理的な理由は無かったため、C++17 向けの規格にさかのぼって仕様が修正され、アクセス可能であれば `private` メンバ変数をバインドできるようになります。C++20 および、この変更に対応した C++17 コンパイラで新仕様を利用できます。 + +```C++ +class Date +{ +private: + + int m_year, m_month, m_day; + +public: + + friend void Work(const Date& date); + + void f(const Date& other) const + { + // OK + int year = other.m_year; + int month = other.m_month; + int day = other.m_day; + + // これまではコンパイルエラー, C++20 以降 OK + auto [y, m, d] = other; + } +}; + +// friend 指定されている関数 +void Work(const Date& date) +{ + // OK + int year = date.m_year; + int month = date.m_month; + int day = date.m_day; + + // これまではコンパイルエラー, C++20 以降 OK + auto [y, m, d] = date; +} + +int main() +{ + +} +``` + +### ユーザ宣言されたコンストラクタを持つクラスの集成体初期化を禁止 [(P1008R1)](https://wg21.link/P1008R1) +C++17 までは集成体の要件が緩かったため、コンストラクタについては、デフォルトコンストラクタが `= delete` または `private` であっても、集成体初期化によって初期化できる抜け道がありました。これはメンバ変数が意図しない値で初期化されるといった問題を引き起こします。C++20 からは集成体の要件が厳しくなり、ユーザ宣言されたコンストラクタがあるクラスは集成体にはなりません。 + +```C++ +struct A +{ + A() = delete; +}; + +struct B +{ +private: + B() = default; +}; + +struct C +{ + int i = 0; + C() = default; +}; + +int main() +{ + A a1; // コンパイルエラー + A a2{}; // C++17 までは OK, C++20 からはコンパイルエラー + + B b1; // コンパイルエラー + B b2{}; // C++17 までは OK, C++20 からはコンパイルエラー + + C c1(123); //コンパイルエラー + C c2{ 123 }; // C++17 までは OK, C++20 からはコンパイルエラー +} +``` + + +### `throw()` による動的例外指定を削除 [(P0619R4)](https://wg21.link/P0619R4) +C++11 では、`noexcept` の追加に合わせ、`throw(typeid, ...)` や `throw()` による動的例外指定が非推奨化されました。C++17 では前者が削除されましたが、古いコードにおいて広く使われていた後者は、移行猶予のために `noexcept(true)` のエイリアスとして改められつつ保持されていました。C++20 では後者も削除されます。 + + +### メッセージ付きの `[[nodiscard]]` 属性 [(P1301R4)](https://wg21.link/P1301R4) +C++17 で追加された `[[nodiscard]]` 属性は、ライブラリなどが提供する関数の誤用を防ぐ助けになりますが、関数がなぜ `[[nodiscard]]` 属性を持っているのかについて、利用者に十分な情報が伝わらない場合がありました。C++20 では `[[nodiscard("....")]]` のような形式でメッセージを追加できるようになります。戻り値の無視があった場合、コンパイラは警告に加えてこのメッセージを補足情報として出力できます。 + +```C++ +#include + +struct Data +{ +private: + + std::vector m_data; + +public: + + void clear() + { + m_data.clear(); + } + + [[nodiscard("Did you mean 'clear'?")]] + bool empty() const + { + return m_data.empty(); + } +}; + +int main() +{ + Data data; + + data.empty(); +} +``` + +コンパイラの出力例 + +``` +prog.cc:27:2: warning: ignoring return value of function declared with 'nodiscard' attribute: + Did you mean 'clear'? [-Wunused-result] + data.empty(); + ^~~~~~~~~~ +1 warning generated. +``` + + +### 指示付き初期化子による集成体の初期化 [(P0329R4)](https://wg21.link/P0329R4) +C++20 から、集成体において、メンバ変数名を指定した初期化(指示付き初期化子を用いた初期化: "Designated Initialization" )ができるようになります。C 言語 (C99) にも同様の機能がありますが、C++20 では C99 の指示付き初期化子と比較して以下のような制約が追加されています。 + +- (a) 指示子の順番はメンバの宣言順と同じである必要がある +- (b) 指示付き初期化子と通常の初期化子の混在はできない +- (c) 同一メンバの指示付き初期化子は複数回使えない +- (d) 指示付き初期化子はネストできない +- (e) 配列の指示付き初期化はできない + +また、初期化子の評価順序が左から右であることが保証されます。 + +```C++ +#include + +struct Point +{ + int x, y; +}; + +struct Item +{ + std::string name; + int id = -1; + Point pos = { -1, -1 }; +}; + +void F(Point) {} + +int main() +{ + Point p1 = { .x = 10, .y = 20 }; // OK + Point p2{ .x = 10, .y = 20 }; // OK + Point p3 = { .x = 10 }; // OK: y は 0 に初期化される + Point p4 = { .y = 20 }; // OK: x は 0 に初期化される + F({ .x = 10, .y = 20 }); // OK + + Point p4 = { .y = 20, .x = 30 }; // コンパイルエラー: (a) 指示子の順番がメンバの宣言順と異なる + Point p5 = { .x = 20, 40 }; // コンパイルエラー: (b) 指示付き初期化子と通常の初期化子は混在できない + Point p6 = { .x = 20, .x = 30, .y = 30 }; // コンパイルエラー: (c) 同一メンバの指示付き初期化子は複数回登場できない + + Item i1{ .name = "shield", .id = 30, .pos = { 5, 2 } }; // OK + Item i2{ .id = 0 }; // OK: name は {} で初期化、pos は { -1, -1 } で初期化 + + Item i3{ .pos.x = 10, .pos.y = 40 }; // コンパイルエラー: (d) 指示付き初期化子はネストできない + + int arr[3] = { [1] = 5 }; // コンパイルエラー: (e) 配列の指示付き初期化はできない +} +``` + +従来までの `Point p{}`, `Item i{}` のような集成体初期化を「指示付き初期化子が 0 個の初期化」と考えると、新しい挙動も理解しやすくなります。なお、次のように集成体ではないクラスの初期化には、指示付き初期化子は使えません。 + +```C++ +#include + +struct Point +{ + int x, y; + Point() = default; + Point(int _x, int _y) + : x(_x) + , y(_y) {} +}; + +int main() +{ + // コンパイルエラー: + // ユーザ宣言されたコンストラクタを持つため集成体ではない + // 集成体でないため指示付き初期化子を使えない + Point p{ .x = 20, .y = 4 }; +} +``` + + ## 標準ライブラリ ### 文字列の先頭や末尾が、ある文字列と一致するか判定 [(P0457R2)](https://wg21.link/P0457R2) @@ -485,7 +874,7 @@ C++17 で導入された `[[nodiscard]]` 属性を標準ライブラリで活用 int main() { - std::vector v = { 10, 20, 30 }; + std::vector v = { 10, 20, 30 }; v.empty(); // C++20 では警告 @@ -527,8 +916,8 @@ void Multiply(float* x, size_t size, float factor) ``` -### スマートポインタの作成時に値をデフォルト初期化する make 関数を追加 [(P1020R1)](https://wg21.link/P1020R1) -実行時性能のために、`float` や `unsigned char` など組み込み型の配列の値をデフォルト初期化させたい(ゼロ初期化しない)ケースがあります。しかし、`make_unique` や `make_shared`, `allocate_shared` でスマートポインタを作成した場合には値初期化が実行されます。C++20 では、値初期化をせずにデフォルト初期化でスマートポインタを作成する関数 `make_unique_default_init`, `make_shared_default_init`, `allocate_shared_default_init` が追加されました。 +### スマートポインタの作成時に値をデフォルト初期化する make 関数を追加 [(P1020R1)](https://wg21.link/P1020R1), [(P1973R1)](https://wg21.link/P1973R1) +実行時性能のために、`float` や `unsigned char` など組み込み型の配列の値をデフォルト初期化させたい(ゼロ初期化しない)ケースがあります。しかし、`make_unique` や `make_shared`, `allocate_shared` でスマートポインタを作成した場合には値初期化が実行されます。C++20 では、値初期化をせずにデフォルト初期化でスマートポインタを作成する関数 `make_unique_for_overwrite`, `make_shared_for_overwrite`, `allocate_shared_for_overwrite` が追加されました。 ```C++ #include #include @@ -550,7 +939,7 @@ int main() std::cout << pv[i] << '\n'; } - auto pd = std::make_unique_default_init(4); // デフォルト初期化 + auto pd = std::make_unique_for_overwrite(4); // デフォルト初期化 for (int i = 0; i < 4; ++i) { @@ -575,7 +964,7 @@ int main() ``` -### 非順序連想コンテナのルックアップ操作で、`key_type` と比較可能な型を変換せずに使えるように [(P0919R3)](http://wg21.link/P0919r3) +### 非順序連想コンテナのルックアップ操作で、`key_type` と比較可能な型を変換せずに使えるように [(P0919R3)](http://wg21.link/P0919r3), [(P1690R1)](http://wg21.link/P1690R1) C++17 までの `unorderd_map` や `unordered_set` など非順序連想コンテナでは、`find()`, `count()`, `equal_range()` などルックアップを行うメンバ関数は引数に `key_type` をとり、例えば次のようなケースで `std::string` 型の一時オブジェクトが作成されて非効率でした。 ```C++ @@ -590,17 +979,24 @@ int main() } ``` -C++20 では、非順序連想コンテナのテンプレートパラメータ `Hash` が `transparent_key_equal` タグを持つときに、`key_type` 以外の型を引数にとるメンバ関数テンプレートのオーバーロードが使用可能になり、一時オブジェクトの作成を回避できるようになります。 +C++20 では、非順序連想コンテナのテンプレートパラメータについて `Hash::is_transparent` と `Pred::is_transparent` が存在するときに、`key_type` 以外の型を引数にとるメンバ関数テンプレートのオーバーロードが使用可能になり、一時オブジェクトの作成を回避できるようになります。 ```C++ #include #include #include +struct string_compare +{ + using is_transparent = void; + bool operator()(std::string_view key, std::string_view txt) const { return key == txt; } +}; + struct string_hash { - using transparent_key_equal = std::equal_to<>; // KeyEqual to use - using hash_type = std::hash; // helper local type + using is_transparent = void; + using transparent_key_equal = string_compare; + using hash_type = std::hash; // helper local type size_t operator()(std::string_view txt) const { return hash_type{}(txt); } size_t operator()(const std::string& txt) const { return hash_type{}(txt); } size_t operator()(const char* txt) const { return hash_type{}(txt); } @@ -610,7 +1006,7 @@ int main() { using namespace std::literals; - std::unordered_map table = { /* ... */ }; + std::unordered_map table = { /* ... */ }; auto it1 = table.find("abc"); // std::string 型の一時オブジェクトは作成されない @@ -619,39 +1015,13 @@ int main() ``` -### 非順序連想コンテナのルックアップ操作に、計算済みハッシュ値を渡せるように [(P0920R2)](https://wg21.link/P0920R2) -同じ種類の非順序連想コンテナを複数扱い、同じキーを用いたルックアップ操作をそれらのコンテナに対して行うようなケースでは、キーのハッシュ値の計算を毎回行うのは冗長です。C++20 ではメンバ関数 `find()`, `count()`, `contains()`, `equal_range()` に、計算済みのハッシュ値を渡せるオーバーロードが追加されます。 +### 2 つの値の中点を計算する `std::midpoint()` 関数 [(P0811R3)](https://wg21.link/P0811R3) +2 つの値 `a`, `b` の中点を計算する際に、単純な `(a + b) / 2` という式ではオーバーフローを起こす可能性があります。C++20 で追加される `std::midpoint()` 関数では、整数に対して ```C++ -#include -#include -#include -#include - -int main() +constexpr Integer midpoint(Integer a, Integer b) noexcept { - std::array, 10> maps = { /*...*/ }; - - const std::string key = "key"; - - const auto hash = maps.front().hash_function()(key); - - for (auto& map : maps) - { - auto it = map.find(key, hash); - - // ... - } -} -``` - - -### 2 つの値の中点を計算する `std::midpoint()` 関数 [(P0811R3)](https://wg21.link/P0811R3) -2 つの値 `a`, `b` の中点を計算する際に、単純な `(a + b) / 2` という式ではオーバーフローを起こす可能性があります。C++20 で追加される `std::midpoint()` 関数では、整数に対して -```C++ -constexpr Integer midpoint(Integer a, Integer b) noexcept -{ - using U = make_unsigned_t; - return a>b ? a-(U(a)-b)/2 : a+(U(b)-a)/2; + using U = make_unsigned_t; + return a>b ? a-(U(a)-b)/2 : a+(U(b)-a)/2; } ``` のような実装が使われ、オーバーフローを回避できます。`(a + b)` が奇数になるケースの結果は `a` の方向に丸められます。 @@ -785,42 +1155,46 @@ int main() ### `std::memory_order` を `enum class` に変更 [(P0439R0)](https://wg21.link/P0439R0) C++17 まで `enum` で定義されていた `std::memory_order` を、モダンな C++ 文法と型安全のために、`enum class` で定義する仕様に変更されます。これまでの表記は定数で提供されるようになるため、既存のソースコードは影響を受けません。また、バイナリ互換性のために、`enum class` の基底型の選択は実装に任せられています。 -```C++ tab="C++17" -namespace std -{ - typedef enum memory_order - { - memory_order_relaxed, - memory_order_consume, - memory_order_acquire, - memory_order_release, - memory_order_acq_rel, - memory_order_seq_cst - } memory_order; -} -``` +=== "C++17" -```C++ tab="C++20" -namespace std -{ - enum class memory_order /* : unspecified */ + ```C++ + namespace std { - relaxed, - consume, - acquire, - release, - acq_rel, - seq_cst - }; + typedef enum memory_order + { + memory_order_relaxed, + memory_order_consume, + memory_order_acquire, + memory_order_release, + memory_order_acq_rel, + memory_order_seq_cst + } memory_order; + } + ``` - inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; - inline constexpr memory_order memory_order_consume = memory_order::consume; - inline constexpr memory_order memory_order_acquire = memory_order::acquire; - inline constexpr memory_order memory_order_release = memory_order::release; - inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel; - inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst; -} -``` +=== "C++20" + + ```C++ + namespace std + { + enum class memory_order /* : unspecified */ + { + relaxed, + consume, + acquire, + release, + acq_rel, + seq_cst + }; + + inline constexpr memory_order memory_order_relaxed = memory_order::relaxed; + inline constexpr memory_order memory_order_consume = memory_order::consume; + inline constexpr memory_order memory_order_acquire = memory_order::acquire; + inline constexpr memory_order memory_order_release = memory_order::release; + inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel; + inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst; + } + ``` ### `Hash` が同一の挙動をしない非順序連想コンテナどうしの比較が可能に [(P0809R0)](https://wg21.link/P0809R0) @@ -901,3 +1275,758 @@ int main() ``` +### 型から cv 修飾と参照を除去する `std::remove_cvref` trait [(P0550R2)](https://wg21.link/P0550R2) +型から `const` や `volatile` の修飾および参照を除去したいだけで、配列からポインタ、関数型から関数ポインタへの変換については不要であっても、C++17 では `std::remove_cv_t>` と書くと長くなるため `std::decay` を使うというケースがよくありました。C++20 からは `std::remove_cv_t>` と同じ効果を持つ `std::remove_cvref` trait と、そのヘルパー型 `std::remove_cvref_t` が追加され、短く書けるようになります。`std::remove_reference_t>` のような順番の間違いを防ぐことにもつながります。 + + +### 標準ライブラリでの不必要な `std::decay` の使用を回避 [(P0777R1)](https://wg21.link/P0777R1) +C++17 の標準ライブラリの規格では `std::decay_t` がおよそ 40 箇所で使われていましたが、そのうち cv 修飾の除去や参照の除去だけで十分な箇所について、実装の意図をより明確にするため `std::remove_reference_t` や、C++20 から導入される `std::remove_cvref_t` に置き換えられます。具体的には、`std::apply` や、`std::optional`, `std::variant` の一部のメンバ関数などで置き換えが発生します。 + + +### 数学定数を提供する `` ヘッダ [(P0631R8)](https://wg21.link/P0631R8) +これまで C++ の標準ライブラリには数学定数が用意されていませんでした(`M_PI` などは拡張)。C++20 からは数学定数をまとめた `` ヘッダが追加され、13 種類の数学定数の変数テンプレート宣言と、それらの `double` 型への特殊化の定義が提供されます。 +変数テンプレートは、標準ライブラリコンセプト `floating_point` を使って、`std::numbers` 名前空間に次のように宣言されます。 +```C++ +template +inline constexpr T pi_v = 3.141592653589793238462643383279502884L; +``` +合わせて `double` 型への特殊化の定義が次のような実装で提供されます。 +```C++ +inline constexpr double pi = pi_v; +``` +C++20 で追加される数学定数の一覧は次のとおりです。 + +| 定数名 | 説明 | binary128 に充分な精度を持つ値 | +|--------------|----------------|-----------------------------------------| +| e_v | e | 2.718281828459045235360287471352662498L | +| log2e_v | 2 を底とする e の対数 | 1.442695040888963407359924681001892137L | +| log10e_v | 10 を底とする e の対数 | 0.434294481903251827651128918916605082L | +| pi_v | 円周率 (π) | 3.141592653589793238462643383279502884L | +| inv_pi_v | 1/π | 0.318309886183790671537767526745028724L | +| inv_sqrtpi_v | 1/√π | 0.564189583547756286948079451560772586L | +| ln2_v | 2 の自然対数 | 0.693147180559945309417232121458176568L | +| ln10_v | 10 の自然対数 | 2.302585092994045684017991454684364208L | +| sqrt2_v | √2 | 1.414213562373095048801688724209698078L | +| sqrt3_v | √3 | 1.732050807568877293527446341505872366L | +| inv_sqrt3_v | 1/√3 | 0.577350269189625764509148780501957456L | +| egamma_v | オイラーの定数 | 0.577215664901532860606512090082402431L | +| phi_v | 黄金数 (φ) | 1.618033988749894848204586834365638117L | + +コードで使用する際は、`using` 宣言によって記述を短くできます。 + +```C++ +#include +#include + +int main() +{ + using std::numbers::pi; + using std::numbers::pi_v; + + std::cout << 2.0 * pi << '\n'; + std::cout << pi_v << '\n'; +} +``` + + +### `basic_string::reserve()` が capacity を縮小しないように [(P0966R1)](https://wg21.link/P0966R1) +C++17 では、`std::basic_string::reserve(size_type)` に現在の `capacity()` よりも小さい値が渡された際、shrink-to-fit を実行することが許可されていたため、注意深く使わないとメモリの再配置を頻繁に引き起こし、実行時性能を低下させることがありました。また、デフォルト引数として `0` が定義されており、`s.reserve()` と `s.shrink_to_fit()` で機能が重複するという問題や、shrink-to-fit を実行せずデフォルト引数も無い `std::vector::reserve(size_type)` との一貫性がないという問題がありました。C++20 からの新しい仕様では `std::vector` 側に合わせ、`std::basic_string::reserve(size_type)` に現在の `capacity()` よりも小さい値が渡された際には何もしないことが保証され、デフォルト引数も廃止(互換性のために deprecated 指定の `std::basic_string:reserve(void)` オーバーロードが追加)となり、これらの問題が解決されます。 + + +### 連想コンテナに `contains()` メンバ関数を追加 [(P0458R2)](https://wg21.link/P0458R2) +ある要素が連想コンテナに含まれているか調べるための C++17 までのイディオムは、直感的でなく初心者にとっても明快ではありませんでした。C++20 からは、要素の存在をチェックする `contains(key)` メンバ関数が `std::map`, `std::multimap`, `std::set`, `std::multiset`, `std::unordered_map`, `std::unordered_multimap`, `std::unordered_set`, `std::unordered_multiset` に追加されます。 + +=== "C++17" + + ```C++ + #include + #include + + int main() + { + const std::unordered_map table = + { + { 200, "OK" }, { 201, "Created" }, { 202, "Accepted" } + }; + + if (table.find(200) != table.end()) + { + std::cout << "key exists\n"; + } + } + ``` + +=== "C++20" + + ```C++ + #include + #include + + int main() + { + const std::unordered_map table = + { + { 200, "OK" }, { 201, "Created" }, { 202, "Accepted" } + }; + + if (table.contains(200)) + { + std::cout << "key exists\n"; + } + } + ``` + +### コンテナから指定した要素を削除する操作に一貫して使える `std::erase()`, `std::erase_if()` 関数 [(P1209R0)](https://wg21.link/p1209r0) +コンテナから特定の要素を削除するという処理は、コンテナの種類によって最適な書き方が異なります。`std::unordered_map` ではイテレータを使って先頭から要素を削除していき、`std::list` ではメンバ関数の `remove()` や `remove_if()` を使い、`std::vector` では `std::remove_if()` と `erase()` メンバ関数を組み合わせます。このようにコンテナの特性に応じてコードを書き分けるのは大変だったため、C++20 ではすべてのコンテナ向けに適切な実装を提供する、一貫して使える非メンバ関数 `std::erase()`, `std::erase_if()` が追加されます。 + +```C++ +#include +#include +#include +#include +#include + +int main() +{ + std::vector v = { 3, 14, 1, 5, 92 }; + std::list li = { 3, 14, 1, 5, 92 }; + std::unordered_map m = { + { "aa", 3 }, { "bb", 14 }, { "cc", 1 }, { "dd", 5 }, { "ee", 92 } }; + + std::erase(v, 3); + std::erase(li, 3); + std::erase_if(m, [](const auto& p) { return p.second == 3; }); + + std::erase_if(v, [](auto n) { return n < 10; }); + std::erase_if(li, [](auto n) { return n < 10; }); + std::erase_if(m, [](const auto& p) { return p.second < 10; }); +} +``` + + +### バイト列の再解釈キャストを補助する `std::bit_cast()` 関数 [(P0476R2)](https://wg21.link/P0476R2) +ある型のオブジェクトが格納されているバイト列に対して、別の型のオブジェクトと解釈してアクセスすること (type punning) は C++ では禁止されています (strict aliasing rule). `float` 型の値のバイト列を `std::uint32_t` 型として扱うときの間違った方法として、次のサンプルのように `reinterpret_cast` や `union` を用いる例があります。これは直感的に見え、実際ほとんどのコンパイラで期待通り動作しますが、規格上は未定義動作となる不正なコードです。正しくは `std::memcpy()` を使います。 + +```C++ +#include +#include +#include + +union FloatUint32 +{ + float f; + std::uint32_t u; +}; + +int main() +{ + constexpr float f = 0.5f; + + // 未定義動作 + const std::uint32_t u1 = *reinterpret_cast(&f); + + // 未定義動作 + const std::uint32_t u2 = FloatUint32{ f }.u; + + // OK + std::uint32_t u3; + std::memcpy(&u3, &f, sizeof(f)); + + std::cout << u1 << '\n'; + std::cout << u2 << '\n'; + std::cout << u3 << '\n'; +} +``` + +しかし、`std::memcpy()` では型変換を `constexpr` にできず、また、デフォルトコンストラクト可能でない型に対応するには `std::aligned_storage` と組み合わせる必要があるなど、適切な実装は面倒でした。C++20 では、この実装をコンパイラサポートによる `constexpr` 対応も含めて実現する `std::bit_cast()` 関数が提供されます。 + +```C++ +template +constexpr To bit_cast(const From& from) noexcept; +``` + +変換先の型 `To` と変換元の型 `From` について、`sizeof(To) != sizeof(From)` の場合や、`std::is_trivially_copyable_v == false` または `std::is_trivially_copyable_v == false` の場合にはコンパイルエラーになるため、間違いを減らす効果もあります。 + +```C++ +#include +#include +#include + +int main() +{ + constexpr float f = 0.5f; + + constexpr std::uint32_t u = std::bit_cast(f); + + std::cout << u << '\n'; +} +``` + + +### `` の関数の非効率な実装を改善 [(P0616R0)](https://wg21.link/P0616R0) +C++17 では、`std::accumulate()` は `acc = binary_op(acc, *i)` として実装されると規格に定められていいたため、次のようなケースで `std::accumulate()` の最中に `std::string` のアロケーションが大量に発生して非効率でした。 + +```C++ +#include +#include +#include +#include + +int main() +{ + std::vector words(100, "abc"); + + std::string s = "start"; + + std::string r = std::accumulate(words.begin(), words.end(), s); + + std::cout << r << '\n'; +} +``` +C++17 の `std::accumulate()` の中で行われること: +```C++ +acc = acc + *i; // operator+(const std::string&, const std::string&) +++i; +... // くり返し +``` + +C++20 では、`std::move()` を使う `acc = binary_op(std::move(acc), *i)` という実装に変更され、右辺値の演算に対する効率的な実装を提供する型 (`std::string` など) が、恩恵を受けられるようになります。 + +C++20 の `std::accumulate()` の中で行われること: +```C++ +acc = std::move(acc) + *i; // operator+(std::string&&, const std::string&) +++i; +... +``` +`operator+(std::string&& lhs, const std::string& rhs)` は基本的に `lhs.append(rhs)` です。次のようにあらかじめ十分なキャパシティを確保したバッファを `std::accumulate()` 内で使えるようにもなります。 + +```C++ +#include +#include +#include +#include + +int main() +{ + std::vector words(100, "abc"); + + std::string s = "start"; + + s.reserve(s.size() + (word.size() * words.front().size())); // C++17 では無意味 + + std::string r = std::accumulate(words.begin(), words.end(), std::move(s)); + + std::cout << r << '\n'; +} +``` + +`std::move()` を使うこの仕様変更は、同じ `` ヘッダの `std::inner_product()` や `std::partial_sum()`, `std::adjacent_difference()` にも適用されます。 + + +### 2 の累乗数に関するユーティリティ関数を追加 [(P0556R3)](https://wg21.link/P0556R3), [(P1355R2)](https://wg21.link/P1355R2), [(P1956R1)](https://wg21.link/P1956R1) +ある整数が 2 の累乗数であるかを調べたり、ある整数に近い 2 の累乗数を探したりする処理は、プログラミングでよく登場しますが、C++17 の標準ライブラリには実装されていませんでした。C++20 では次のような関数が追加されます。 + +```C++ +namespace std +{ + template + constexpr bool has_single_bit(T x) noexcept; + + template + constexpr T bit_ceil(T x); + + template + constexpr T bit_floor(T x) noexcept; + + template + constexpr T bit_width(T x) noexcept; +} +``` + +- 引数 `x` のビット列に含まれる 1 が 1 個だけであるかを判定する `std::has_single_bit(x)` + - 「`x` が 2 の累乗数 (1, 2, 4, 8, ...) であるか」と同じ意味 +- `x` 以上で最小の 2 の累乗数を返す `std::bit_ceil(x)` +- `x` 以下で最大の 2 の累乗数 (ただし `x` が 0 の場合は 0) を返す `std::bit_floor(x)` +- `(1 + log2(x))` の整数部 (ただし `x` が 0 の場合は 0) を返す `std::bit_width(x)` + - 「`x` を表現するために何ビット必要か」と同じ意味 + +いずれの関数も、型 `T` が符号なし整数型 (`unsigned char`, `unsigned short`, `unsigned int`, `unsigned long`, `unsigned long long`) の場合のみオーバーロード解決に参加します。なお、`std::bit_ceil(x)` について、結果が型 `T` で表現できない場合の動作は未定義です。 + +```C++ +#include +#include + +int main() +{ + for (unsigned i = 0; i <= 16; ++i) + { + std::cout << i << ": " + << std::has_single_bit(i) << ' ' + << std::bit_ceil(i) << ' ' + << std::bit_floor(i) << ' ' + << std::bit_width(i) << '\n'; + } +} +``` +``` +0: 0 1 0 0 +1: 1 1 1 1 +2: 1 2 2 2 +3: 0 4 2 2 +4: 1 4 4 3 +5: 0 8 4 3 +6: 0 8 4 3 +7: 0 8 4 3 +8: 1 8 8 4 +9: 0 16 8 4 +10: 0 16 8 4 +11: 0 16 8 4 +12: 0 16 8 4 +13: 0 16 8 4 +14: 0 16 8 4 +15: 0 16 8 4 +16: 1 16 16 5 +``` + + +### `std::list` と `std::forward_list` の要素削除メンバ関数が、削除した要素数を返すように [(P0646R1)](https://wg21.link/P0646R1) +`std::list` のメンバ関数 `remove()` で要素を削除した際、実際に削除された要素数を知るには、前後で `size()` の比較を行わなければなりませんでした。しかし、`std::forward_list` の場合は `size()` メンバ関数を持たないため、O(n) の操作である `std::distance()` を使う必要がありました。C++20 では、`std::list` および `std::forward_list` の `remove()`, `remove_if()`, `unique()` メンバ関数が、削除された要素数を戻り値として返すようになります。なお、呼び出し側で戻り値を使わない場合、主要コンパイラは最適化で処理を省略するため、この仕様変更が実行時性能に与える影響は無いとされています。 + + +### 要素数が決まっている配列型かどうかを調べる型特性 `std::is_bounded_array`, `std::is_unbounded_array` [(P1357R1)](https://wg21.link/P1357R1) +C++17 の標準ライブラリが提供する型特性には、配列の要素数が決まっている (bounded) かどうかを判定するものはありませんでした。C++20 では利便性のために、型 `T` が要素数既知の配列型であるかを調べる型特性 `std::is_bounded_array` と、型 `T` が要素数未知の配列型であるかを調べる型特性 `std::is_unbounded_array` が追加されました。 + +```C++ +#include +#include + +int main() +{ + std::cout << std::boolalpha; + + std::cout << std::is_bounded_array_v << '\n'; // false + std::cout << std::is_bounded_array_v << '\n'; // false + std::cout << std::is_bounded_array_v << '\n'; // true + + std::cout << std::is_unbounded_array_v << '\n'; // false + std::cout << std::is_unbounded_array_v << '\n'; // true + std::cout << std::is_unbounded_array_v << '\n'; // false +} +``` +``` +false +false +true +false +true +false +``` + +C++ 標準ライブラリの機能では、例えば `std::make_unique()` が要素数既知の配列型を禁止しています。こうしたオーバーロードを扱うときに、この型特性が便利です。 + +```C++ +#include +#include + +int main() +{ + auto p1 = std::make_unique(3); + auto p2 = std::make_unique(); // コンパイルエラー +} +``` + +### `std::function` のムーブコンストラクタが `noexcept` に [(P0771R1)](https://wg21.link/P0771R1) +実行時性能を向上させるため、C++20 では `std::function` のムーブコンストラクタが `noexcept` になります。なお、libstdc++ と libc++ では提案時点ですでに実装済みでした。 + + +### ``, `` の多くの関数が `constexpr` に [(P0202R3)](https://wg21.link/P0202R3), [(P0879R0)](https://wg21.link/P0879R0) +C++20 では `` ヘッダの `std::swap()`, `std::exchange()` および、`` ヘッダで条件を満たす全関数が `constexpr` に対応します。`std::all_of()` や `std::sort()`, `std::reverse()` など、よく使われるアルゴリズム関数が `constexpr` になります。 + +`` ヘッダで `constexpr` にならないのは以下の関数のみです。 + +- `std::stable_partition()`, `std::inplace_merge()`, `std::stable_sort()` + - メモリのアロケーション等が必要なため +- `std::shuffle()`, `std::sample()` + - `constexpr` 関数を持たない `std::uniform_int_distribution` を使用するため +- `ExecutionPolicy` を引数に取る関数 + +```C++ +#include +#include +#include + +constexpr int SumOfTop3(std::array a) +{ + std::nth_element(a.begin(), a.begin() + 3, a.end()); // C++20 では constexpr + + return a[0] + a[1] + a[2]; +} + +int main() +{ + constexpr int n = SumOfTop3({ 1, 8, 16, 4, 2 }); + + static_assert(n == 7); + + std::cout << n << '\n'; // 7 +} +``` + +``` +7 +``` + + +### デストラクタを自動で呼ばない `delete` 演算子オーバーロード [(P0722R3)](https://wg21.link/P0722R3) +C++17 では、ユーザ定義の `delete` の中でメンバ変数にアクセスしたくても、すでにクラスのデストラクタが呼ばれているため未定義の動作になります。 + +```C++ +#include +#include + +struct Object +{ + std::string m_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + static void operator delete(void* p) + { + std::cout << "m_str: " + << static_cast(p)->m_str // 未定義の動作 + << '\n'; + ::operator delete(p); + } +}; + +int main() +{ + Object* p = new Object; + delete p; +} +``` + +C++20 では、`delete` の第二引数を `std::destroying_delete_t` 型にすることで、デストラクタの呼び出しが自動で実行されない挙動に設定できます(この新しい挙動を「destroying operator delete」と呼びます)。`void T::operator delete(T* ptr, std::destroying_delete_t)` のように、第一引数にはクラスへのポインタが渡され、明示的にデストラクタ `ptr->~T()` を呼ぶ必要があります。 + +```C++ +#include +#include + +struct Object +{ + std::string m_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + static void operator delete(Object* p, std::destroying_delete_t) + { + std::cout << "m_str: " + << p->m_str + << '\n'; + p->~Object(); + ::operator delete(p); + } +}; + +int main() +{ + Object* p = new Object; + delete p; +} +``` + + +### ビット循環シフト・ビットカウント関数 [(P0553R4)](https://wg21.link/P0553R4) +ビット列の左端と右端が循環するようにシフトするビットローテーションや、1 になっているビットを数える popcount などのビット操作命令は、多くの CPU アーキテクチャに搭載されていますが、それに対応する関数は C++17 標準ライブラリには存在せず、`__builtin_popcount` (GCC, Clang) や `__popcnt` (MSVC) のような、処理系が提供する非標準の組み込み関数を使う必要がありました。C++20 では、7 種類のビット操作が標準ライブラリ関数として提供されます。 + +```C++ +namespace std +{ + template + [[nodiscard]] constexpr T rotl(T x, int s) noexcept; + + template + [[nodiscard]] constexpr T rotr(T x, int s) noexcept; + + template + constexpr int countl_zero(T x) noexcept; + + template + constexpr int countl_one(T x) noexcept; + + template + constexpr int countr_zero(T x) noexcept; + + template + constexpr int countr_one(T x) noexcept; + + template + constexpr int popcount(T x) noexcept; +} +``` + +- 引数 `x` を `s` だけ左にビットローテーションさせる `std::rotl(x, s)` + - `s` が負数の場合 `std::rotr(x, -s)` と同等 +- 引数 `x` を `s` だけ右にビットローテーションさせる `std::rotr(x, s)` + - `s` が負数の場合 `std::rotl(x, -s)` と同等 +- `x` の最上位ビットから数えて 0 が連続する個数を返す `std::countl_zero(x)` +- `x` の最上位ビットから数えて 1 が連続する個数を返す `std::countl_one(x)` +- `x` の最下位ビットから数えて 0 が連続する個数を返す `std::countr_zero(x)` +- `x` の最下位ビットから数えて 1 が連続する個数を返す `std::countr_one(x)` +- `x` の 2 進表現に含まれる 1 の個数を返す `std::popcount(x)` + +いずれの関数も、型 `T` が符号なし整数型 (`unsigned char`, `unsigned short`, `unsigned int`, `unsigned long`, `unsigned long long`) の場合のみオーバーロード解決に参加します。 + +```C++ +#include +#include +#include + +void ShowBinary(std::uint16_t x) +{ + for (size_t i = 0; i < 16; ++i) + { + std::cout << ((x >> (15 - i)) & 1); + } + std::cout << '\n'; +} + +int main() +{ + const std::uint16_t x = 0b0001'0110'1110'1111; + + ShowBinary(x); + std::cout << '\n'; + + for (int s = -4; s <= 4; ++s) + { + ShowBinary(std::rotl(x, s)); + } + std::cout << '\n'; + + for (int s = -4; s <= 4; ++s) + { + ShowBinary(std::rotr(x, s)); + } + std::cout << '\n'; + + std::cout << std::countl_zero(x) << '\n'; // 3 + std::cout << std::countl_one(x) << '\n'; // 0 + std::cout << std::countr_zero(x) << '\n'; // 0 + std::cout << std::countr_one(x) << '\n'; // 4 + std::cout << std::popcount(x) << '\n'; // 10 +} +``` +``` +0001011011101111 + +1111000101101110 +1110001011011101 +1100010110111011 +1000101101110111 +0001011011101111 +0010110111011110 +0101101110111100 +1011011101111000 +0110111011110001 + +0110111011110001 +1011011101111000 +0101101110111100 +0010110111011110 +0001011011101111 +1000101101110111 +1100010110111011 +1110001011011101 +1111000101101110 + +3 +0 +0 +4 +10 +``` + + +### 組み込み配列から `std::array` を作成する `std::to_array()` [(P0325R4)](https://wg21.link/P0325R4) +C++17 で導入された型推論ガイドによって、`std::array` で次のようなコードが書けるようになりました。 + +```C++ +#include + +int main() +{ + auto a = std::array{ 1, 2, 3 }; // std::array +} +``` + +しかし、`"hello"` や `int[4]` のような組み込み配列から `std::array` や `std::array` を作成する方法はありませんでした。 + +```C++ +#include + +int main() +{ + auto a1 = std::array{ "hello" }; // std::array + + int xs[4] = { 1,2,3,4 }; + auto a2 = std::array{ xs }; // std::array +} +``` + +C++20 では、組み込み配列の左辺値または右辺値を引数にとり、値をコピー(ムーブ)して新しい `std::array` を作成する補助関数 `std::to_array()` が追加され、組み込み配列からの `std::array` の作成が簡単になりました。 + +```C++ +#include + +int main() +{ + auto a1 = std::to_array("hello"); // std::array + + int xs[4] = { 1,2,3,4 }; + auto a2 = std::to_array(xs); // std::array + + auto a3 = std::to_array({ 1, 2 }); // std::array +} +``` + + +### `std::filesystem::create_directory()` の挙動を直感的に [(P1164R1)](https://wg21.link/P1164R1) +C++17 で導入された `std::filesystem::create_directory()` および `std::filesystem::create_directories()` の当初の仕様では、 + +- 新しく作成するディレクトリのパスと同名のファイルが存在するときにはエラーにならない +- 新しく作成するディレクトリのパスが `"a/b/c"` であるとき、すでに `"a/b"` という名前のファイルが存在する場合はエラーとなる一方で、`"a/b/c"` というファイルが存在する場合にはエラーにならない + +という、対処しにくく一貫しない挙動がありました。C++20 では同名の(ディレクトリでない)ファイルが存在する場合は常にエラーになるよう仕様が修正されます。この変更は C++17 規格にさかのぼって適用され、対応した C++17 環境でも利用できます。 + + +### `std::make_shared()` と `std::allocate_shared()` が配列をサポート [(P0674R1)](https://wg21.link/P0674R1) +C++11 で導入された `std::make_shared()`, `std::allocate_shared()` は配列をサポートしていませんでした。C++20 からは配列型のためのオーバーロードが追加されます。 + +```C++ +#include +#include + +int main() +{ + // 値初期化された int[100] + std::shared_ptr p1 = std::make_shared(100); + std::cout << p1[99] << '\n'; // 0 + + // 値初期化された double[6][4] + std::shared_ptr p2 = std::make_shared(6); + std::cout << p2[5][3] << '\n'; // 0.0 + + // 値初期化された int[100] + std::shared_ptr p3 = std::make_shared(); + std::cout << p3[99] << '\n'; // 0 + + // 値初期化された double[6][4] + std::shared_ptr p4 = std::make_shared(); + std::cout << p4[5][3] << '\n'; // 0.0 + + // int[100] で各要素は -1 + std::shared_ptr p5 = std::make_shared(100, -1); + std::cout << p5[99] << '\n'; // -1 + + // double[6][4] で、各 double[4] は { 1.0, 0.9, 0.8, 0.7 } + std::shared_ptr p6 = std::make_shared(6, { 1.0, 0.9, 0.8, 0.7 }); + std::cout << p6[5][3] << '\n'; // 0.7 + + // int[100] で各要素は -2 + std::shared_ptr p7 = std::make_shared(-2); + std::cout << p7[99] << '\n'; // -2 + + // double[6][4] で、各 double[4] は { 0.0, 0.1, 0.2, 0.3 } + std::shared_ptr p8 = std::make_shared({ 0.0, 0.1, 0.2, 0.3 }); + std::cout << p8[5][3] << '\n'; // 0.3 +} +``` +``` +0 +0 +0 +0 +-1 +0.7 +-2 +0.3 +``` + + +### 範囲の要素を左右にシフトする `std::shift_left()`, `std::shift_right()` 関数 [(P0769R2)](https://wg21.link/P0769R2) + +ある範囲の要素を左右に移動させたいときは `std::rotate()` を使う方法がありましたが、はみ出た分は回転して反対側に移動する操作であるため、それらの値が不要な場合は余計なコストが発生していました。また、`std::rotate()` では要素をどちらにどれだけ移動するかという意図を明快に表現できませんでした。 + +C++20 では、ある範囲の要素を回転無しで移動(シフト)させる `std::shift_left(first, last, n)`, `std::shift_right(first, last, n)` 関数が追加されます。移動させる要素の範囲を `first`, `last` で指定し、`n` 個分左右にシフトします。`n` が 0 以下の場合は何もしません。移動により要素がなくなった部分は有効で未規定の状態になるため、新しい要素を代入するか、`erase()` で削除します。 + +```C++ +#include +#include +#include + +int main() +{ + { + std::vector v = { 1, 2, 3, 4, 5 }; + + // 左へ 1 ローテ―ト + // { 2, 3, 4, 5, 1 } + std::rotate(v.begin(), v.begin() + 1, v.end()); + + v.back() = 6; + + for (const auto& e : v) + { + std::cout << e << ' '; // 2 3 4 5 6 + } + + std::cout << '\n'; + } + + { + std::vector v = { 1, 2, 3, 4, 5 }; + + // 左へ 1 シフト + // { 2, 3, 4, 5, (未規定) } + std::shift_left(v.begin(), v.end(), 1); + + v.back() = 6; + + for (const auto& e : v) + { + std::cout << e << ' '; // 2 3 4 5 6 + } + + std::cout << '\n'; + } +} +``` +``` +2 3 4 5 6 +2 3 4 5 6 +``` + + +### `std::string_view` のコンストラクタに、範囲のイテレータペアを受け取るオーバーロードを追加 [(P1391R4)](https://wg21.link/P1391R4) + +これまでは、メモリ連続な範囲から `std::string_view` を作成するには、先頭ポインタとサイズを渡す必要があり、イテレータを使用することはできませんでした。 + + C++20 では、イテレータコンセプト `std::contiguous_iterator` を満たす先頭イテレータ `It` と、`std::sized_sentinel_for` を満たすイテレータ `End` による `string_view::string_view(It first, End last);` というコンストラクタのオーバーロードが追加されます。これにより、`char` 型の配列や `std::vector`, 非標準のライブラリで使われている様々な文字列クラスからの `std::string_view` の構築が、イテレータを使う方法で実現できるようになります。 + +```C++ +#include +#include +#include + +int main() +{ + const std::vector chars = { 'A', 'B', 'C', 'D', 'E' }; + + // C++17 まで + //const std::string_view sv{ chars.data(), chars.size() }; + + const std::string_view sv{ chars.begin(), chars.end() }; + + std::cout << sv << '\n'; +} +``` +``` +ABCDE +``` diff --git a/docs/standardization/cpp23.md b/docs/standardization/cpp23.md new file mode 100644 index 0000000..f078794 --- /dev/null +++ b/docs/standardization/cpp23.md @@ -0,0 +1,328 @@ +description: C++23 の新しい言語機能と標準ライブラリ機能の解説 + +# C++23 の新機能 + +C++23 の規格ドラフトに入ることが決まった新機能・仕様変更を随時追加していきます。 + +## 言語機能 + +### `std::size_t` 型の整数リテラルのためのサフィックスを追加 [(P0330)](http://wg21.link/P0330) +これまで `std::size_t` 型の値をリテラルで表現する方法がなく、次のような不便の原因になっていました。 + +```C++ +#include +#include + +int main() +{ + std::vector v{ 0, 1, 2, 3 }; + + // コンパイルエラー (64-bit 環境): i と s が異なる型 + for (auto i = 0u, s = v.size(); i < s; ++i) + { + + } + + // OK + for (auto i = size_t(0), s = v.size(); i < s; ++i) + { + + } + + size_t s2 = std::max(1u, v.size()); // コンパイルエラー (64-bit 環境): 引数の型が不一致 + + size_t s3 = std::max(1u, v.size()); // OK +} +``` + +C++23 では `std::size_t` 型の値を表すリテラルのサフィックス `z` および `Z` が追加され、`123z` は符号付きの `std::size_t` に相当する型 (`std::ptrdiff_­t`), `123uz` が `std::size_t` 型と見なされます。 + +```C++ +#include +#include + +int main() +{ + std::vector v{ 0, 1, 2, 3 }; + + // OK + for (auto i = 0uz, s = v.size(); i < s; ++i) + { + + } + + size_t s2 = std::max(1uz, v.size()); // OK +} +``` + + +## 標準ライブラリ + + + +### C 言語との atomics の互換を目的とした標準ライブラリヘッダ `` を追加 [(P0943R6)](http://wg21.link/P0943R6) +C++ atomics の非ジェネリックな部分 (`atomic_char` や `atomic_ulong` など) は C 言語からも使えるように設計されていましたが、C 言語がジェネリック用として独自に `_Atomic(T)` 型指定子を追加したほか、C++ の規格では C 言語のヘッダ `` に関する言及がないことから、実際の相互運用にはいくらかの手間が必要でした。 + +```C++ +#ifdef __cplusplus + #include + using std::atomic_int; + using std::memory_order; + using std::memory_order_acquire; + #define _Atomic(X) std::atomic + // ... +#else + #include +#endif + +// C でも C++ でもコンパイル可能 +int main(void) +{ + atomic_int a; + memory_order b = memory_order_acquire; + _Atomic(int) c; + return 0; +} +``` + +C++23 では標準ライブラリに C 言語との atomics の互換のためのヘッダ `` を追加し、インクルードするだけで共通のコードを書けるようにします。 + +```C++ +#include + +// C でも C++ でもコンパイル可能 +int main(void) +{ + atomic_int a; + memory_order b = memory_order_acquire; + _Atomic(int) c; + return 0; +} +``` + + +### 型が scoped enum であるかを調べる `std::is_scoped_enum` trait [(P1048R1)](http://wg21.link/P1048R1) +C++11 で scoped enum (`enum class` / `enum struct`) が導入されましたが、同時に導入された type trait `std::is_enum` は、unscoped enum (`enum`) 型と scoped enum 型のどちらにも `true` を示し、両者を区別できませんでした。 + +C++23 では型が scoped enum であるかを調べる `std::is_scoped_enum` trait が追加され、両者を区別できるようになります。 + +```C++ +#include +#include + +enum UnscopedEnum {}; +enum class ScopedEnum {}; + +int main() +{ + std::cout << std::boolalpha; + + std::cout << std::is_enum_v << '\n'; // false + std::cout << std::is_enum_v << '\n'; // true + std::cout << std::is_enum_v << '\n'; // true + + std::cout << std::is_scoped_enum_v << '\n'; // false + std::cout << std::is_scoped_enum_v << '\n'; // false + std::cout << std::is_scoped_enum_v << '\n'; // true +} +``` + +なお、Boost.TypeTraits にはすでに次のように実装されています。 + +```C++ +namespace boost +{ + template + struct is_scoped_enum + : conjunction, negation>>::type {}; +} +``` + + +### 文字列クラスに、指定した文字や文字列が含まれているかを返す `.contains()` メンバ関数 [(P1679R3)](https://wg21.link/P1679R3) +`std::string` や `std::string_view` にある文字や文字列が含まれているかを調べるには、次のように `.find()` を使った少し遠回りなコードを書く必要がありました。 + +```C++ +#include +#include + +int main() +{ + std::string s = "C++23"; + + std::cout << std::boolalpha; + + // '4' が含まれているかを調べる + std::cout << (s.find('4') != std::string::npos) << '\n'; // false + + // "++" が含まれているかを調べる + std::cout << (s.find("++") != std::string::npos) << '\n'; // true +} +``` + +C++23 では `std::basic_string` と `std::basic_string_view` に、指定した文字や文字列が含まれるかを返す `.contains(basic_string_view)`, `.contains(charT)`, `.contains(const charT*)` メンバ関数が追加され、より簡潔に書けるようになりました。 + +```C++ +#include +#include + +int main() +{ + std::string s = "C++23"; + + std::cout << std::boolalpha; + + // '4' が含まれているかを調べる + std::cout << s.contains('4') << '\n'; // false + + // "++" が含まれているかを調べる + std::cout << s.contains("++") << '\n'; // true +} +``` + +なお、指定した文字列から始まるかを調べる `.starts_with()`, 指定した文字列で終わるかを調べる `.ends_with()` メンバ関数が C++20 で追加されています。 + + +### 列挙型の値を基底型に変換する `std::to_underlying()` [(P1682R3)](https://wg21.link/P1682R3) +これまで `enum class` を基底型の整数値へ適切に変換するには `static_cast>(e)` と書く必要がありました。C++23 ではこれを `std::to_underlying(e)` と書けるようになりました。 + +```C++ +#include +#include + +enum class State : char +{ + Open, Closed +}; + +enum class Terrain +{ + Open, Mountain, River, Ocean +}; + +int main() +{ + auto a = std::to_underlying(State::Open); // c は char + + auto b = std::to_underlying(Terrain::Mountain); // b は int +} +``` + + + + + + + + + + + + + + +### `std::stringstream` と異なり、内部バッファに `std::span` を用いる `std::spanstream` [(P0448R4)](https://wg21.link/P0448R4) +`std::stringstream` は内部のバッファを動的に確保するものでしたが、C++23 で追加された `std::spanstream` は `std::span` をバッファとして用いることができるようになりました。例えば、スタックに確保した固定サイズのバッファを割り当てることができます。 + +```C++ +# include +# include +# include +# include + +int main() +{ + const char input[] = "11 22 33"; + + // C++23 + { + std::ispanstream is{ input }; // span としてバッファを渡す + int a, b, c; + is >> a >> b >> c; + + char buffer[30]{}; + std::ospanstream os{ buffer }; // span としてバッファを渡す + os << (a * 100) << (b * 100) << (c * 100); + std::cout << std::string_view{ os.span() } << '\n'; + } + + // (比較) std::stringstream + { + std::istringstream is{ input }; // std::string が作られる + int a, b, c; + is >> a >> b >> c; + + std::ostringstream os; // 内部バッファは動的に確保される + os << (a * 100) << (b * 100) << (c * 100); + std::cout << os.str() << '\n'; + } +} +``` + + + +### ` type_info::operator==()` が constexpr に [(P1328R1)](https://wg21.link/P1328R1) +C++20 で `typeid` が constexpr の文脈で使えるようになりましたが、戻り値の `std::type_info` には constexpr のメンバ関数が無く実用性がありませんでした。C++23 では `std::type_info::operator==` が constexpr になりました。 + +```C++ +#include +#include + +struct IShape +{ + virtual ~IShape() = default; +}; + +struct Circle : IShape +{ + double x, y, r; +}; + +int main() +{ + if constexpr (typeid(IShape) != typeid(Circle)) + { + std::cout << "typeid(IShape) != typeid(Circle))\n"; + } +} +``` + + +### `std::stack` と `std::queue` に、イテレータペアをとるコンストラクタオーバーロードを追加 [(P1425R4)](https://wg21.link/P1425R4) +`std::stack` と `std::queue` には、イテレータペアをとるコンストラクタが無く、他のコンテナやコンテナアダプタと一貫性が無かったため、C++23 で追加されました。これは、C++23 で追加された `ranges::to` の内部実装が複雑になるのを防ぐことにも貢献します。 + +```C++ +#include +#include +#include + +int main() +{ + std::vector v = { 10, 20, 30, 40 }; + std::stack s(v.begin(), v.end()); + std::queue q(v.begin(), v.end()); +} +``` + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/standardization/cppx.md b/docs/standardization/cppx.md index 30e327a..a706ae3 100644 --- a/docs/standardization/cppx.md +++ b/docs/standardization/cppx.md @@ -1,31 +1,39 @@ -description: C++23 以降に向けて議論が進行中のおもな提案の紹介 +description: C++23, C++26 以降に向けて議論が進行中のおもな提案の紹介 -# C++23 以降に向けた提案 -議論が進行中のおもな提案です。標準化会議によって規格化が妥当でないと判断された場合は採択されません。 +# C++23, C++26 以降に向けた提案 + +!!! Info + C++23 の規格ドラフト入りが決まった機能は [C++23 の新機能](cpp23.md) に移動します。 + +C++ 標準化委員会で議論が進行中のおもな提案です。まだ提案段階であるため、委員会によって妥当でないと判断された場合は規格には採択されません。提案内容は採択まで何度も変更されることがあります。 ## 標準ライブラリ モジュール - [Standard Library Modules (P0581)](https://wg21.link/p0581) `` や `` など、すべての C++ 標準ライブラリヘッダをモジュールとして提供する提案です。言語機能としてのモジュールは C++20 に導入されましたが、標準ライブラリへの導入は議論が間に合わず、C++23 に先送りされました。標準ライブラリのモジュールへの移行に合わせて、[標準ライブラリを再編成する提案](https://wg21.link/p1453)も出されています。 + ## `operator[]` に複数の引数 - [Subscripts On Parade (P1277)](https://wg21.link/p1277) `m[i, j, k]` のように、`operator[]` の引数に複数の値を渡せるようにする提案です。多次元配列の要素に簡潔な式でアクセスできるようになります。この書き方は、C++17 規格ではコンマ演算子と解釈されて `m[k]` になってしまうため、まずは[現行の文法を deprecated にする提案](https://wg21.link/p1161)が提出されています。`std::span` の多次元版である [`std::mdspan` の提案](https://github.com/kokkos/array_ref)での活用も期待されます。 + ## 低レベル オーディオ API - [A Standard Audio API for C++: Motivation, Scope, and Basic Design (P1386)](https://wg21.link/p1386) 音声再生・録音を行う低レベル API `std::audio` を追加する提案です。以前頓挫した 2D Graphics API の標準化に比べれば、枯れている技術なので実現可能性は低くはなさそうです。波形データをオーディオデバイスとやり取りすることが主要な役割で、音声コーデックやフィルタなどの機能は提供しません。[実験的な実装を公開](https://github.com/stdcpp-audio/libstdaudio)して、設計に関するフィードバックを集めている段階です。 + ## ネットワーク - [Working Draft, C++ Extensions for Networking (N4734)](https://wg21.link/n4734) ネットワーク機能を標準ライブラリに導入する提案です。[Boost.Asio](https://www.boost.org/doc/libs/release/doc/html/boost_asio.html) をベースに、ソケット通信、名前解決、インターネットプロトコル、タイマー、バッファ、非同期処理のための各種機能を実装する予定です。 + ## リフレクション -- [Working Draft, C++ Extensions for Reflection (N4766)](https://wg21.link/n4766) +- [Working Draft, C++ Extensions for Reflection (N4818)](https://wg21.link/n4818) C++ にリフレクションを導入する提案です。C# のような動的なリフレクションではなく、コンパイル時に情報を取得する静的なリフレクションです。 @@ -45,7 +53,267 @@ auto is_constexpr_function = is_constexpr::value; // true この機能を前提とした[メタクラスの提案](https://wg21.link/p0707)も議論が進んでいます。 + +## パターンマッチング +- [Pattern Matching (P1371)](https://wg21.link/p1371) + +`std::tuple` や `std::variant` で C++ における代数的データ型の表現が広がりましたが、それらを扱うための `std::apply` や `std::visit` は複雑で多くの制約があります。C++ 以外のプログラミング言語にならい、パターンマッチングを導入してこの問題を解決する提案です。この提案では、より宣言的で構造化された `switch` 文として、`inspect` 式という新しい文法の導入を提案しています。 + +パターンマッチングの実験的な実装を [Compiler Explorer](https://godbolt.org/z/fdd5j4) 上で試すことができます。 + + +```C++ +// inspect 式の文法 +inspect constexpr_opt (init-statement_opt condition) trailing-return-type_opt +{ + pattern guard_opt => statement + pattern guard_opt => !_opt { statement-seq } + ... +}; +``` + +### 整数のマッチング + +=== "現在" + + ```C++ + switch (code) + { + case 200: std::cout << "OK\n"; break; + case 404: std::cout << "Not Found\n"; break; + default : std::cout << "don't care\n"; + } + ``` + +=== "提案" + + ```C++ + inspect (code) + { + 200 => { std::cout << "OK\n" } + 404 => { std::cout << "Not Found\n" } + __ => { std::cout << "don't care\n" } // __ はワイルドカードパターン + }; + ``` + +### 文字列のマッチング + +=== "現在" + + ```C++ + if (s == "png") + { + std::cout << "PNG Image\n"; + } + else if (s == "jpg") + { + std::cout << "JPEG Image\n"; + } + else + { + std::cout << "Not supported\n"; + } + ``` + +=== "提案" + + ```C++ + inspect (s) + { + "png" => { std::cout << "PNG Image\n"; } + "jpg" => { std::cout << "JPEG Image\n"; } + __ => { std::cout << "Not supported\n"; } + }; + ``` + +### Tuples のマッチング + +=== "現在" + + ```C++ + auto&& [x, y] = pos; + if (x == 0 && y == 0) + { + std::cout << "on the origin\n"; + } + else if (y == 0) + { + std::cout << "on X-axis\n"; + } + else if (x == 0) + { + std::cout << "on Y-axis\n"; + } + else + { + std::cout << x << ", " << y << '\n'; + } + ``` + +=== "提案" + + ```C++ + inspect (pos) + { + [0, 0] => { std::cout << "on the origin\n"; } + [x, 0] => { std::cout << "on the X-axis\n"; } + [0, y] => { std::cout << "on the Y-axis\n"; } + [x, y] => { std::cout << x << ", " << y << '\n'; } + }; + ``` + +### Variants のマッチング + +=== "現在" + + ```C++ + struct Visitor + { + void operator()(int i) const + { + std::cout << "int: " << i << '\n'; + } + + void operator()(float f) const + { + std::cout << "float: " << f << '\n'; + } + }; + + int main() + { + std::variant v = 3.14f; + + std::visit(Visitor{}, v); + } + ``` + +=== "提案" + + ```C++ + int main() + { + std::variant v = 3.14f; + + inspect (v) + { + i => { std::cout << "int: " << i << '\n'; } + f => { std::cout << "float: " << f << '\n'; } + } + }; + ``` + +### Polymorphic Types のマッチング + +=== "現在" + + ```C++ + struct Shape + { + virtual ~Shape() = default; + virtual double area() const = 0; + }; + + struct Circle : Shape + { + double radius; + double area() const override + { + return std::numbers::pi * radius * radius; + } + }; + + struct Rectangle : Shape + { + double width, height; + double area() const override + { + return width * height; + } + }; + ``` + +=== "提案" + + ```C++ + struct Shape + { + virtual ~Shape() = default; + }; + + struct Circle : Shape + { + double radius; + }; + + struct Rectangle : Shape + { + double width, height; + }; + + double Area(const Shape& shape) + { + return inspect (shape) + { + [r] => std::numbers::pi * r * r; + [w, h] => w * h; + } + }; + ``` + + +## 拡張浮動小数点数型 +- [Extended floating-point types (P1467)](https://wg21.link/P1467) +- [Fixed-layout floating-point type aliases (P1468)](https://wg21.link/P1468) + +`float`, `double`, `long double` 以外の浮動小数点数型の実装を可能にする提案です。コンピュータグラフィックスや機械学習分野で使用頻度が増えている半精度 (16-bit) 浮動小数点数型を、組み込み型として提供できるようにすることが主な目的です。 + + +## Unicode 名による文字エスケープ +- [Named universal character escapes (P2071)](https://wg21.link/P2071) + +Python などで採用されている、Unicode 名による文字エスケープを導入する提案です。不可視文字や似ている字形を文字 / 文字列リテラルで記述する際に役に立ちます。 + +```C++ +std::string a ="\N{ZERO WIDTH SPACE}"; // "​" (不可視の空白) +std::string b = "\N{GREEK CAPITAL LETTER OMEGA}"; // "Ω" +std::string c = "\N{OHM SIGN}"; // "Ω" +``` + + +## `std::string::operator=(char)` の問題の解消 +- [String's gratuitous assignment (P2037)](https://wg21.link/P2037) + +`std::string::operator=(char)` によって次のようなコードがコンパイルできてしまう問題の解決を図る提案です。この関数自体を `deprecated` にすることも解決法の候補として挙げられています。 + +```C++ +std::string s; +s = 48.0; +std::cout << s << '\n'; +``` + + +## `std::print()` +- [Formatted output (P2093)](https://wg21.link/P2093) + +C++20 の `std::format` をベースにした新しい標準出力 API, `std::print()` を導入する提案です。`std::cout` に比べて、Unicode 対応、使いやすさや実行時性能の向上、バイナリサイズの削減が期待されます。 + +```C++ +std::print("Hello, {}!", name); +``` + + +## ソート済み配列による連想コンテナ +- [A Standard flat_set (P1222)](https://wg21.link/P1222) +- [A Standard flat_map (P0429)](https://wg21.link/P0429) + +ソート済み配列(デフォルトでは vector)を使った連想コンテナ実装 `std::flat_set`, `std::flat_multiset`, `std::flat_map`, `std::flat_multimap` を標準ライブラリに追加する提案です。 + ## Executors +## コルーチンのライブラリサポート + + +## 契約プログラミング diff --git a/docs/standardization/header.md b/docs/standardization/header.md new file mode 100644 index 0000000..fab62c2 --- /dev/null +++ b/docs/standardization/header.md @@ -0,0 +1,140 @@ +description: C++ 標準ライブラリヘッダの規格書、リファレンス、各種実装リスト + +# C++ 標準ライブラリ + +C++ の規格で定められた標準ライブラリに含まれるヘッダの一覧です。 +リファレンス Web サイトは + +- **en:** cppreference.com, +- **jp:** cppreference.com (日本語訳) +- **cpprefjp**: cpprefjp + +に対応しています。 + +## 標準ライブラリ + +|ヘッダ|リファレンス|実装|バージョン| +|---|---|---|---| +|[<algorithm>](http://eel.is/c++draft/algorithm.syn)|[en](https://en.cppreference.com/w/cpp/header/algorithm) / [jp](https://ja.cppreference.com/w/cpp/header/algorithm) / [cpprefjp](https://cpprefjp.github.io/reference/algorithm.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/algorithm) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/algorithm) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/algorithm)|| +|[<any>](https://eel.is/c++draft/any)|[en](https://en.cppreference.com/w/cpp/header/any) / [jp](https://ja.cppreference.com/w/cpp/header/any) / [cpprefjp](https://cpprefjp.github.io/reference/any.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/any) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/any) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/any)|since C++17| +|[<array>](http://eel.is/c++draft/array.syn)|[en](https://en.cppreference.com/w/cpp/header/array) / [jp](https://ja.cppreference.com/w/cpp/header/array) / [cpprefjp](https://cpprefjp.github.io/reference/array.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/array) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/array) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/array)|since C++11| +|[<atomic>](http://eel.is/c++draft/atomics.syn)|[en](https://en.cppreference.com/w/cpp/header/atomic) / [jp](https://ja.cppreference.com/w/cpp/header/atomic) / [cpprefjp](https://cpprefjp.github.io/reference/atomic.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/atomic) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/atomic) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/atomic)|since C++11| +|[<barrier>](http://eel.is/c++draft/barrier.syn)|[en](https://en.cppreference.com/w/cpp/header/barrier) / [jp](https://ja.cppreference.com/w/cpp/header/barrier) / [cpprefjp](https://cpprefjp.github.io/reference/barrier.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/barrier) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/barrier) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/barrier)|since C++20| +|[<bit>](http://eel.is/c++draft/bit.syn)|[en](https://en.cppreference.com/w/cpp/header/bit) / [jp](https://ja.cppreference.com/w/cpp/header/bit) / [cpprefjp](https://cpprefjp.github.io/reference/bit.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/bit) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/bit) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/bit)|since C++20| +|[<bitset>](http://eel.is/c++draft/bitset.syn)|[en](https://en.cppreference.com/w/cpp/header/bitset) / [jp](https://ja.cppreference.com/w/cpp/header/bitset) / [cpprefjp](https://cpprefjp.github.io/reference/bitset.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/bitset) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/bitset) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/bitset)|| +|[<cassert>](http://eel.is/c++draft/cassert.syn)|[en](https://en.cppreference.com/w/cpp/header/cassert) / [jp](https://ja.cppreference.com/w/cpp/header/cassert) / [cpprefjp](https://cpprefjp.github.io/reference/cassert.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cassert) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cassert) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cassert)|| +|[<cctype>](http://eel.is/c++draft/cctype.syn)|[en](https://en.cppreference.com/w/cpp/header/cctype) / [jp](https://ja.cppreference.com/w/cpp/header/cctype) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cctype) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cctype) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cctype)|| +|[<cerrno>](http://eel.is/c++draft/cerrno.syn)|[en](https://en.cppreference.com/w/cpp/header/cerrno) / [jp](https://ja.cppreference.com/w/cpp/header/cerrno) / [cpprefjp](https://cpprefjp.github.io/reference/cerrno.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cerrno) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cerrno) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cerrno)|| +|[<cfenv>](http://eel.is/c++draft/cfenv.syn)|[en](https://en.cppreference.com/w/cpp/header/cfenv) / [jp](https://ja.cppreference.com/w/cpp/header/cfenv) / [cpprefjp](https://cpprefjp.github.io/reference/cfenv.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cfenv) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cfenv) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cfenv)|since C++11| +|[<cfloat>](http://eel.is/c++draft/cfloat.syn)|[en](https://en.cppreference.com/w/cpp/header/cfloat) / [jp](https://ja.cppreference.com/w/cpp/header/cfloat) / [cpprefjp](https://cpprefjp.github.io/reference/cfloat.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cfloat) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cfloat) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cfloat)|| +|[<charconv>](http://eel.is/c++draft/charconv.syn)|[en](https://en.cppreference.com/w/cpp/header/charconv) / [jp](https://ja.cppreference.com/w/cpp/header/charconv) / [cpprefjp](https://cpprefjp.github.io/reference/charconv.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/charconv) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/charconv) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/charconv)|since C++17| +|[<chrono>](http://eel.is/c++draft/time.syn)|[en](https://en.cppreference.com/w/cpp/header/chrono) / [jp](https://ja.cppreference.com/w/cpp/header/chrono) / [cpprefjp](https://cpprefjp.github.io/reference/chrono.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/chrono) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/chrono) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/chrono)|since C++11| +|[<cinttypes>](http://eel.is/c++draft/cinttypes.syn)|[en](https://en.cppreference.com/w/cpp/header/cinttypes) / [jp](https://ja.cppreference.com/w/cpp/header/cinttypes) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cinttypes) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cinttypes) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cinttypes)|since C++11| +|[<climits>](http://eel.is/c++draft/climits.syn)|[en](https://en.cppreference.com/w/cpp/header/climits) / [jp](https://ja.cppreference.com/w/cpp/header/climits) / [cpprefjp](https://cpprefjp.github.io/reference/climits.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/climits) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/climits) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/climits)|| +|[<clocale>](http://eel.is/c++draft/clocale.syn)|[en](https://en.cppreference.com/w/cpp/header/clocale) / [jp](https://ja.cppreference.com/w/cpp/header/clocale) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/clocale) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/clocale) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/clocale)|| +|[<cmath>](http://eel.is/c++draft/cmath.syn)|[en](https://en.cppreference.com/w/cpp/header/cmath) / [jp](https://ja.cppreference.com/w/cpp/header/cmath) / [cpprefjp](https://cpprefjp.github.io/reference/cmath.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cmath) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cmath) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cmath)|| +|[<compare>](http://eel.is/c++draft/compare.syn)|[en](https://en.cppreference.com/w/cpp/header/compare) / [jp](https://ja.cppreference.com/w/cpp/header/compare) / [cpprefjp](https://cpprefjp.github.io/reference/compare.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/libstdc%2B%2B-v3/libsupc%2B%2B/compare) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/compare) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/compare)|since C++20| +|[<complex>](http://eel.is/c++draft/complex.syn)|[en](https://en.cppreference.com/w/cpp/header/complex) / [jp](https://ja.cppreference.com/w/cpp/header/complex) / [cpprefjp](https://cpprefjp.github.io/reference/complex.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/complex) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/complex) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/complex)|| +|[<concepts>](http://eel.is/c++draft/concepts.syn)|[en](https://en.cppreference.com/w/cpp/header/concepts) / [jp](https://ja.cppreference.com/w/cpp/header/concepts) / [cpprefjp](https://cpprefjp.github.io/reference/concepts.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/concepts) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/concepts) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/concepts)|since C++20| +|[<condition_variable>](http://eel.is/c++draft/condition.variable.syn)|[en](https://en.cppreference.com/w/cpp/header/condition_variable) / [jp](https://ja.cppreference.com/w/cpp/header/condition_variable) / [cpprefjp](https://cpprefjp.github.io/reference/condition_variable.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/condition_variable) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/condition_variable) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/condition_variable)|since C++11| +|[<coroutine>](http://eel.is/c++draft/coroutine.syn)|[en](https://en.cppreference.com/w/cpp/header/coroutine) / jp / [cpprefjp](https://cpprefjp.github.io/reference/coroutine.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/coroutine) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/coroutine) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/coroutine)|since C++20| +|[<csetjmp>](http://eel.is/c++draft/csetjmp.syn)|[en](https://en.cppreference.com/w/cpp/header/csetjmp) / [jp](https://ja.cppreference.com/w/cpp/header/csetjmp) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/csetjmp) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/csetjmp) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/csetjmp)|| +|[<csignal>](http://eel.is/c++draft/csignal.syn)|[en](https://en.cppreference.com/w/cpp/header/csignal) / [jp](https://ja.cppreference.com/w/cpp/header/csignal) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/csignal) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/csignal) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/csignal)|| +|[<cstdarg>](http://eel.is/c++draft/cstdarg.syn)|[en](https://en.cppreference.com/w/cpp/header/cstdarg) / [jp](https://ja.cppreference.com/w/cpp/header/cstdarg) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cstdarg) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cstdarg) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cstdarg)|| +|[<cstddef>](http://eel.is/c++draft/cstddef.syn)|[en](https://en.cppreference.com/w/cpp/header/cstddef) / [jp](https://ja.cppreference.com/w/cpp/header/cstddef) / [cpprefjp](https://cpprefjp.github.io/reference/cstddef.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cstddef) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cstddef) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cstddef)|| +|[<cstdint>](http://eel.is/c++draft/cstdint.syn)|[en](https://en.cppreference.com/w/cpp/header/cstdint) / [jp](https://ja.cppreference.com/w/cpp/header/cstdint) / [cpprefjp](https://cpprefjp.github.io/reference/cstdint.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cstdint) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cstdint) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cstdint)|since C++11| +|[<cstdio>](http://eel.is/c++draft/cstdio.syn)|[en](https://en.cppreference.com/w/cpp/header/cstdio) / [jp](https://ja.cppreference.com/w/cpp/header/cstdio) / [cpprefjp](https://cpprefjp.github.io/reference/cstdio.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cstdio) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cstdio) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cstdio)|| +|[<cstdlib>](http://eel.is/c++draft/cstdlib.syn)|[en](https://en.cppreference.com/w/cpp/header/cstdlib) / [jp](https://ja.cppreference.com/w/cpp/header/cstdlib) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cstdlib) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cstdlib) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cstdlib)|| +|[<cstring>](http://eel.is/c++draft/cstring.syn)|[en](https://en.cppreference.com/w/cpp/header/cstring) / [jp](https://ja.cppreference.com/w/cpp/header/cstring) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cstring) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cstring) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cstring)|| +|[<ctime>](http://eel.is/c++draft/ctime.syn)|[en](https://en.cppreference.com/w/cpp/header/ctime) / [jp](https://ja.cppreference.com/w/cpp/header/ctime) / [cpprefjp](https://cpprefjp.github.io/reference/ctime.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/ctime) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/ctime) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/ctime)|| +|[<cuchar>](http://eel.is/c++draft/cuchar.syn)|[en](https://en.cppreference.com/w/cpp/header/cuchar) / [jp](https://ja.cppreference.com/w/cpp/header/cuchar) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cuchar) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cuchar) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cuchar)|since C++11| +|[<cwchar>](http://eel.is/c++draft/cwchar.syn)|[en](https://en.cppreference.com/w/cpp/header/cwchar) / [jp](https://ja.cppreference.com/w/cpp/header/cwchar) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cwchar) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cwchar) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cwchar)|| +|[<cwctype>](http://eel.is/c++draft/cwctype.syn)|[en](https://en.cppreference.com/w/cpp/header/cwctype) / [jp](https://ja.cppreference.com/w/cpp/header/cwctype) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cwctype) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cwctype) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cwctype)|| +|[<debugging>](http://eel.is/c++draft/debugging)|[en](https://en.cppreference.com/w/cpp/header/debugging) / jp / cpprefjp|libstdc++ / libc++ / MSVC|since C++26| +|[<deque>](http://eel.is/c++draft/deque.syn)|[en](https://en.cppreference.com/w/cpp/header/deque) / [jp](https://ja.cppreference.com/w/cpp/header/deque) / [cpprefjp](https://cpprefjp.github.io/reference/deque.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/deque) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/deque) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/deque)|| +|[<exception>](http://eel.is/c++draft/exception.syn)|[en](https://en.cppreference.com/w/cpp/header/exception) / [jp](https://ja.cppreference.com/w/cpp/header/exception) / [cpprefjp](https://cpprefjp.github.io/reference/exception.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/libsupc%2B%2B/exception) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/exception) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/exception)|| +|[<execution>](http://eel.is/c++draft/execution.syn)|[en](https://en.cppreference.com/w/cpp/header/execution) / [jp](https://ja.cppreference.com/w/cpp/header/execution) / [cpprefjp](https://cpprefjp.github.io/reference/execution.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/execution) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/execution) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/execution)|since C++17| +|[<expected>](https://eel.is/c++draft/expected)|[en](https://en.cppreference.com/w/cpp/header/expected) / jp / [cpprefjp](https://cpprefjp.github.io/reference/expected.html)| [libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/expected) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/expected) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/expected)|since C++23| +|[<filesystem>](http://eel.is/c++draft/fs.filesystem.syn)|[en](https://en.cppreference.com/w/cpp/header/filesystem) / [jp](https://ja.cppreference.com/w/cpp/header/filesystem) / [cpprefjp](https://cpprefjp.github.io/reference/filesystem.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/filesystem) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/filesystem) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/filesystem)|since C++17| +|[<flat_set>](https://eel.is/c++draft/flat.set)|[en](https://en.cppreference.com/w/cpp/header/flat_set) / jp / cpprefjp|libstdc++ / libc++ / MSVC|since C++23| +|[<flat_map>](https://eel.is/c++draft/flat.map)|[en](https://en.cppreference.com/w/cpp/header/flat_map) / jp / [cpprefjp](https://cpprefjp.github.io/reference/flat_map.html)|libstdc++ / libc++ / MSVC|since C++23| +|[<format>](https://eel.is/c++draft/format)|[en](https://en.cppreference.com/w/cpp/header/format) / [jp](https://ja.cppreference.com/w/cpp/header/format) / [cpprefjp](https://cpprefjp.github.io/reference/format.html)|libstdc++ / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/format) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/format)|since C++20| +|[<forward_list>](http://eel.is/c++draft/forward.list.syn)|[en](https://en.cppreference.com/w/cpp/header/forward_list) / [jp](https://ja.cppreference.com/w/cpp/header/forward_list) / [cpprefjp](https://cpprefjp.github.io/reference/forward_list.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/forward_list) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/forward_list) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/forward_list)|since C++11| +|[<fstream>](http://eel.is/c++draft/fstream.syn)|[en](https://en.cppreference.com/w/cpp/header/fstream) / [jp](https://ja.cppreference.com/w/cpp/header/fstream) / [cpprefjp](https://cpprefjp.github.io/reference/fstream.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/fstream) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/fstream) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/fstream)|| +|[<functional>](http://eel.is/c++draft/functional.syn)|[en](https://en.cppreference.com/w/cpp/header/functional) / [jp](https://ja.cppreference.com/w/cpp/header/functional) / [cpprefjp](https://cpprefjp.github.io/reference/functional.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/functional) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/functional) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/functional)|| +|[<future>](http://eel.is/c++draft/future.syn)|[en](https://en.cppreference.com/w/cpp/header/future) / [jp](https://ja.cppreference.com/w/cpp/header/future) / [cpprefjp](https://cpprefjp.github.io/reference/future.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/future) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/future) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/future)|since C++11| +|[<generator>](http://eel.is/c++draft/generator.syn)|[en](https://en.cppreference.com/w/cpp/header/generator) / jp / [cpprefjp](https://cpprefjp.github.io/reference/generator.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/include/std/generator) / libc++ / MSVC|since C++23| +|[<hazard_pointer>](https://eel.is/c++draft/hazard.pointer.syn)|[en](https://en.cppreference.com/w/cpp/header/hazard_pointer) / jp / cpprefjp|libstdc++ / libc++ / MSVC|since C++26| +|[<initializer_list>](http://eel.is/c++draft/initializer.list.syn)|[en](https://en.cppreference.com/w/cpp/header/initializer_list) / [jp](https://ja.cppreference.com/w/cpp/header/initializer_list) / [cpprefjp](https://cpprefjp.github.io/reference/initializer_list.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/libsupc%2B%2B/initializer_list) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/initializer_list) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/initializer_list)|since C++11| +|[<iomanip>](http://eel.is/c++draft/iomanip.syn)|[en](https://en.cppreference.com/w/cpp/header/iomanip) / [jp](https://ja.cppreference.com/w/cpp/header/iomanip) / [cpprefjp](https://cpprefjp.github.io/reference/iomanip.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/iomanip) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/iomanip) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/iomanip)|| +|[<ios>](http://eel.is/c++draft/ios.syn)|[en](https://en.cppreference.com/w/cpp/header/ios) / [jp](https://ja.cppreference.com/w/cpp/header/ios) / [cpprefjp](https://cpprefjp.github.io/reference/ios.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/ios) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/ios) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/ios)|| +|[<iosfwd>](http://eel.is/c++draft/iosfwd.syn)|[en](https://en.cppreference.com/w/cpp/header/iosfwd) / [jp](https://ja.cppreference.com/w/cpp/header/iosfwd) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/iosfwd) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/iosfwd) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/iosfwd)|| +|[<iostream>](http://eel.is/c++draft/iostream.syn)|[en](https://en.cppreference.com/w/cpp/header/iostream) / [jp](https://ja.cppreference.com/w/cpp/header/iostream) / [cpprefjp](https://cpprefjp.github.io/reference/iostream.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/iostream) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/iostream) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/iostream)|| +|[<istream>](http://eel.is/c++draft/istream.syn)|[en](https://en.cppreference.com/w/cpp/header/istream) / [jp](https://ja.cppreference.com/w/cpp/header/istream) / [cpprefjp](https://cpprefjp.github.io/reference/istream.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/istream) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/istream) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/istream)|| +|[<iterator>](http://eel.is/c++draft/iterator.synopsis)|[en](https://en.cppreference.com/w/cpp/header/iterator) / [jp](https://ja.cppreference.com/w/cpp/header/iterator) / [cpprefjp](https://cpprefjp.github.io/reference/iterator.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/iterator) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/iterator) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/iterator)|| +|[<latch>](http://eel.is/c++draft/latch.syn)|[en](https://en.cppreference.com/w/cpp/header/latch) / [jp](https://ja.cppreference.com/w/cpp/header/latch) / [cpprefjp](https://cpprefjp.github.io/reference/latch.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/latch) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/latch) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/latch)|since C++20| +|[<limits>](http://eel.is/c++draft/limits.syn)|[en](https://en.cppreference.com/w/cpp/header/limits) / [jp](https://ja.cppreference.com/w/cpp/header/limits) / [cpprefjp](https://cpprefjp.github.io/reference/limits.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/limits) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/limits) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/limits)|| +|[<linalg>](http://eel.is/c++draft/linalg.syn)|[en](https://en.cppreference.com/w/cpp/header/linalg) / jp / [cpprefjp](https://cpprefjp.github.io/reference/linalg.html)|libstdc++ / libc++ / MSVC|since C++26| +|[<list>](http://eel.is/c++draft/list.syn)|[en](https://en.cppreference.com/w/cpp/header/list) / [jp](https://ja.cppreference.com/w/cpp/header/list) / [cpprefjp](https://cpprefjp.github.io/reference/list.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/list) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/list) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/list)|| +|[<locale>](http://eel.is/c++draft/locale.syn)|[en](https://en.cppreference.com/w/cpp/header/locale) / [jp](https://ja.cppreference.com/w/cpp/header/locale) / [cpprefjp](https://cpprefjp.github.io/reference/locale.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/locale) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/locale) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/locale)|| +|[<map>](http://eel.is/c++draft/associative.map.syn)|[en](https://en.cppreference.com/w/cpp/header/map) / [jp](https://ja.cppreference.com/w/cpp/header/map) / [cpprefjp](https://cpprefjp.github.io/reference/map.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/map) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/map) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/map)|| +|[<mdspan>](http://eel.is/c++draft/mdspan.syn)|[en](https://en.cppreference.com/w/cpp/header/mdspan) / jp / [cpprefjp](https://cpprefjp.github.io/reference/mdspan.html)|libstdc++ / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/mdspan) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/mdspan)|since C++23| +|[<memory>](http://eel.is/c++draft/memory.syn)|[en](https://en.cppreference.com/w/cpp/header/memory) / [jp](https://ja.cppreference.com/w/cpp/header/memory) / [cpprefjp](https://cpprefjp.github.io/reference/memory.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/memory) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/memory) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/memory)|| +|[<memory_resource>](http://eel.is/c++draft/mem.res.syn)|[en](https://en.cppreference.com/w/cpp/header/memory_resource) / [jp](https://ja.cppreference.com/w/cpp/header/memory_resource) / [cpprefjp](https://cpprefjp.github.io/reference/memory_resource.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/memory_resource) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/memory_resource) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/memory_resource)|since C++17| +|[<mutex>](http://eel.is/c++draft/mutex.syn)|[en](https://en.cppreference.com/w/cpp/header/mutex) / [jp](https://ja.cppreference.com/w/cpp/header/mutex) / [cpprefjp](https://cpprefjp.github.io/reference/mutex.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/mutex) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/mutex) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/mutex)|since C++11| +|[<new>](http://eel.is/c++draft/new.syn)|[en](https://en.cppreference.com/w/cpp/header/new) / [jp](https://ja.cppreference.com/w/cpp/header/new) / [cpprefjp](https://cpprefjp.github.io/reference/new.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/libsupc%2B%2B/new) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/new) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/new)|| +|[<numbers>](http://eel.is/c++draft/numbers.syn)|[en](https://en.cppreference.com/w/cpp/header/numbers) / [jp](https://ja.cppreference.com/w/cpp/header/numbers) / [cpprefjp](https://cpprefjp.github.io/reference/numbers.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/numbers) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/numbers) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/numbers)|since C++20| +|[<numeric>](http://eel.is/c++draft/numeric.ops.overview)|[en](https://en.cppreference.com/w/cpp/header/numeric) / [jp](https://ja.cppreference.com/w/cpp/header/numeric) / [cpprefjp](https://cpprefjp.github.io/reference/numeric.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/numeric) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/numeric) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/numeric)|| +|[<optional>](http://eel.is/c++draft/optional.syn)|[en](https://en.cppreference.com/w/cpp/header/optional) / [jp](https://ja.cppreference.com/w/cpp/header/optional) / [cpprefjp](https://cpprefjp.github.io/reference/optional.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/optional) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/optional) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/optional)|since C++17| +|[<ostream>](http://eel.is/c++draft/ostream.syn)|[en](https://en.cppreference.com/w/cpp/header/ostream) / [jp](https://ja.cppreference.com/w/cpp/header/ostream) / [cpprefjp](https://cpprefjp.github.io/reference/ostream.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/ostream) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/ostream) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/ostream)|| +|[<print>](http://eel.is/c++draft/print.syn)|[en](https://en.cppreference.com/w/cpp/header/print) / jp / [cpprefjp](https://cpprefjp.github.io/reference/print.html)| [libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/print) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/print) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/print)|since C++23| +|[<queue>](http://eel.is/c++draft/queue.syn)|[en](https://en.cppreference.com/w/cpp/header/queue) / [jp](https://ja.cppreference.com/w/cpp/header/queue) / [cpprefjp](https://cpprefjp.github.io/reference/queue.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/queue) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/queue) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/queue)|| +|[<random>](http://eel.is/c++draft/rand.synopsis)|[en](https://en.cppreference.com/w/cpp/header/random) / [jp](https://ja.cppreference.com/w/cpp/header/random) / [cpprefjp](https://cpprefjp.github.io/reference/random.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/random) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/random) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/random)|since C++11| +|[<ranges>](http://eel.is/c++draft/ranges.syn)|[en](https://en.cppreference.com/w/cpp/header/ranges) / [jp](https://ja.cppreference.com/w/cpp/header/ranges) / [cpprefjp](https://cpprefjp.github.io/reference/ranges.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/ranges) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/ranges) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/ranges)|since C++20| +|[<ratio>](http://eel.is/c++draft/ratio.syn)|[en](https://en.cppreference.com/w/cpp/header/ratio) / [jp](https://ja.cppreference.com/w/cpp/header/ratio) / [cpprefjp](https://cpprefjp.github.io/reference/ratio.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/ratio) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/ratio) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/ratio)|since C++11| +|[<rcu>](http://eel.is/c++draft/rcu.syn)|[en](https://en.cppreference.com/w/cpp/header/rcu) / jp / cpprefjp|libstdc++ / libc++ / MSVC|since C++26| +|[<regex>](http://eel.is/c++draft/re.syn)|[en](https://en.cppreference.com/w/cpp/header/regex) / [jp](https://ja.cppreference.com/w/cpp/header/regex) / [cpprefjp](https://cpprefjp.github.io/reference/regex.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/regex) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/regex) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/regex)|since C++11| +|[<scoped_allocator>](http://eel.is/c++draft/allocator.adaptor.syn)|[en](https://en.cppreference.com/w/cpp/header/scoped_allocator) / [jp](https://ja.cppreference.com/w/cpp/header/scoped_allocator) / [cpprefjp](https://cpprefjp.github.io/reference/scoped_allocator.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/scoped_allocator) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/scoped_allocator) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/scoped_allocator)|since C++11| +|[<semaphore>](http://eel.is/c++draft/semaphore.syn)|[en](https://en.cppreference.com/w/cpp/header/semaphore) / jp / [cpprefjp](https://cpprefjp.github.io/reference/semaphore.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/semaphore) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/semaphore) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/semaphore)|since C++20| +|[<set>](http://eel.is/c++draft/associative.set.syn)|[en](https://en.cppreference.com/w/cpp/header/set) / [jp](https://ja.cppreference.com/w/cpp/header/set) / [cpprefjp](https://cpprefjp.github.io/reference/set.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/set) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/set) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/set)|| +|[<shared_mutex>](http://eel.is/c++draft/shared.mutex.syn)|[en](https://en.cppreference.com/w/cpp/header/shared_mutex) / [jp](https://ja.cppreference.com/w/cpp/header/shared_mutex) / [cpprefjp](https://cpprefjp.github.io/reference/shared_mutex.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/shared_mutex) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/shared_mutex) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/shared_mutex)|since C++14| +|[<source_location>](http://eel.is/c++draft/source.location.syn)|[en](https://en.cppreference.com/w/cpp/header/source_location) / [jp](https://ja.cppreference.com/w/cpp/header/source_location) / [cpprefjp](https://cpprefjp.github.io/reference/source_location.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/source_location) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/source_location) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/source_location)|since C++20| +|[<span>](http://eel.is/c++draft/span.syn)|[en](https://en.cppreference.com/w/cpp/header/span) / [jp](https://ja.cppreference.com/w/cpp/header/span) / [cpprefjp](https://cpprefjp.github.io/reference/span.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/span) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/span) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/span)|since C++20| +|[<spanstream>](http://eel.is/c++draft/spanstream.syn)|[en](https://en.cppreference.com/w/cpp/header/spanstream) / jp / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/include/std/spanstream) / libc++ / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/spanstream)|since C++23| +|[<sstream>](http://eel.is/c++draft/sstream.syn)|[en](https://en.cppreference.com/w/cpp/header/sstream) / [jp](https://ja.cppreference.com/w/cpp/header/sstream) / [cpprefjp](https://cpprefjp.github.io/reference/sstream.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/sstream) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/sstream) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/sstream)|| +|[<stack>](http://eel.is/c++draft/stack.syn)|[en](https://en.cppreference.com/w/cpp/header/stack) / [jp](https://ja.cppreference.com/w/cpp/header/stack) / [cpprefjp](https://cpprefjp.github.io/reference/stack.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/stack) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/stack) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/stack)|| +|[<stacktrace>](http://eel.is/c++draft/stacktrace.syn)|[en](https://en.cppreference.com/w/cpp/header/stacktrace) / jp / [cpprefjp](https://cpprefjp.github.io/reference/stacktrace.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/include/std/stacktrace) / libc++ / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/stacktrace)|since C++23| +|[<stdexcept>](http://eel.is/c++draft/stdexcept.syn)|[en](https://en.cppreference.com/w/cpp/header/stdexcept) / [jp](https://ja.cppreference.com/w/cpp/header/stdexcept) / [cpprefjp](https://cpprefjp.github.io/reference/stdexcept.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/stdexcept) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/stdexcept) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/stdexcept)|| +|[<stdfloat>](http://eel.is/c++draft/stdfloat.syn)|[en](https://en.cppreference.com/w/cpp/header/stdfloat) / jp / [cpprefjp](https://cpprefjp.github.io/reference/stdfloat.html)| [libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/stdfloat) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/stdfloat) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/stdfloat)|since C++23| +|[<stop_token>](http://eel.is/c++draft/thread.stoptoken.syn)|[en](https://en.cppreference.com/w/cpp/header/stop_token) / [jp](https://ja.cppreference.com/w/cpp/header/stop_token) / [cpprefjp](https://cpprefjp.github.io/reference/stop_token.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/stop_token) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/stop_token) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/stop_token)|since C++20| +|[<streambuf>](http://eel.is/c++draft/streambuf.syn)|[en](https://en.cppreference.com/w/cpp/header/streambuf) / [jp](https://ja.cppreference.com/w/cpp/header/streambuf) / [cpprefjp](https://cpprefjp.github.io/reference/streambuf.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/streambuf) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/streambuf) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/streambuf)|| +|[<string>](http://eel.is/c++draft/string.syn)|[en](https://en.cppreference.com/w/cpp/header/string) / [jp](https://ja.cppreference.com/w/cpp/header/string) / [cpprefjp](https://cpprefjp.github.io/reference/string.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/string) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/string) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/string)|| +|[<string_view>](http://eel.is/c++draft/string.view.synop)|[en](https://en.cppreference.com/w/cpp/header/string_view) / [jp](https://ja.cppreference.com/w/cpp/header/string_view) / [cpprefjp](https://cpprefjp.github.io/reference/string_view.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/string_view) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/string_view) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/string_view)|since C++17| +|[<syncstream>](http://eel.is/c++draft/syncstream.syn)|[en](https://en.cppreference.com/w/cpp/header/syncstream) / [jp](https://ja.cppreference.com/w/cpp/header/syncstream) / [cpprefjp](https://cpprefjp.github.io/reference/syncstream.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/syncstream) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/syncstream) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/syncstream)|since C++20| +|[<system_error>](http://eel.is/c++draft/system.error.syn)|[en](https://en.cppreference.com/w/cpp/header/system_error) / [jp](https://ja.cppreference.com/w/cpp/header/system_error) / [cpprefjp](https://cpprefjp.github.io/reference/system_error.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/system_error) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/system_error) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/system_error)|since C++11| +|[<text_encoding>](https://eel.is/c++draft/text.encoding)|[en](https://en.cppreference.com/w/cpp/header/text_encoding) / jp / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/include/std/text_encoding) / libc++ / MSVC|since C++26| +|[<thread>](http://eel.is/c++draft/thread.syn)|[en](https://en.cppreference.com/w/cpp/header/thread) / [jp](https://ja.cppreference.com/w/cpp/header/thread) / [cpprefjp](https://cpprefjp.github.io/reference/thread.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/thread) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/thread) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/thread)|since C++11| +|[<tuple>](http://eel.is/c++draft/tuple.syn)|[en](https://en.cppreference.com/w/cpp/header/tuple) / [jp](https://ja.cppreference.com/w/cpp/header/tuple) / [cpprefjp](https://cpprefjp.github.io/reference/tuple.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/tuple) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/tuple) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/tuple)|since C++11| +|[<type_traits>](http://eel.is/c++draft/meta.type.synop)|[en](https://en.cppreference.com/w/cpp/header/type_traits) / [jp](https://ja.cppreference.com/w/cpp/header/type_traits) / [cpprefjp](https://cpprefjp.github.io/reference/type_traits.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/type_traits) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/type_traits) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/type_traits)|since C++11| +|[<typeindex>](http://eel.is/c++draft/type.index.synopsis)|[en](https://en.cppreference.com/w/cpp/header/typeindex) / [jp](https://ja.cppreference.com/w/cpp/header/typeindex) / [cpprefjp](https://cpprefjp.github.io/reference/typeindex.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/typeindex) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/typeindex) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/typeindex)|since C++11| +|[<typeinfo>](http://eel.is/c++draft/typeinfo.syn)|[en](https://en.cppreference.com/w/cpp/header/typeinfo) / [jp](https://ja.cppreference.com/w/cpp/header/typeinfo) / [cpprefjp](https://cpprefjp.github.io/reference/typeinfo.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/libsupc%2B%2B/typeinfo) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/typeinfo) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/typeinfo)|| +|[<unordered_map>](http://eel.is/c++draft/unord.map.syn)|[en](https://en.cppreference.com/w/cpp/header/unordered_map) / [jp](https://ja.cppreference.com/w/cpp/header/unordered_map) / [cpprefjp](https://cpprefjp.github.io/reference/unordered_map.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/unordered_map) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/unordered_map) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/unordered_map)|since C++11| +|[<unordered_set>](http://eel.is/c++draft/unord.set.syn)|[en](https://en.cppreference.com/w/cpp/header/unordered_set) / [jp](https://ja.cppreference.com/w/cpp/header/unordered_set) / [cpprefjp](https://cpprefjp.github.io/reference/unordered_set.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/unordered_set) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/unordered_set) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/unordered_set)|since C++11| +|[<utility>](http://eel.is/c++draft/utility)|[en](https://en.cppreference.com/w/cpp/header/utility) / [jp](https://ja.cppreference.com/w/cpp/header/utility) / [cpprefjp](https://cpprefjp.github.io/reference/utility.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/utility) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/utility) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/utility)|| +|[<valarray>](http://eel.is/c++draft/valarray.syn)|[en](https://en.cppreference.com/w/cpp/header/valarray) / [jp](https://ja.cppreference.com/w/cpp/header/valarray) / [cpprefjp](https://cpprefjp.github.io/reference/valarray.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/valarray) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/valarray) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/valarray)|| +|[<variant>](http://eel.is/c++draft/variant.syn)|[en](https://en.cppreference.com/w/cpp/header/variant) / [jp](https://ja.cppreference.com/w/cpp/header/variant) / [cpprefjp](https://cpprefjp.github.io/reference/variant.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/variant) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/variant) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/variant)|since C++17| +|[<vector>](http://eel.is/c++draft/vector.syn)|[en](https://en.cppreference.com/w/cpp/header/vector) / [jp](https://ja.cppreference.com/w/cpp/header/vector) / [cpprefjp](https://cpprefjp.github.io/reference/vector.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/vector) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/vector) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/vector)|| +|[<version>](https://eel.is/c++draft/version.syn)|[en](https://en.cppreference.com/w/cpp/header/version) / [jp](https://ja.cppreference.com/w/cpp/header/version) / [cpprefjp](https://cpprefjp.github.io/reference/version.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/version) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/version) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/version)|since C++20| + + +## 非推奨または削除 + +|ヘッダ|リファレンス|実装|バージョン| +|---|---|---|---| +|[<ccomplex>](http://eel.is/c++draft/depr.complex.h.syn)|[en](https://en.cppreference.com/w/cpp/header/ccomplex) / [jp](https://ja.cppreference.com/w/cpp/header/ccomplex) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/ccomplex) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/ccomplex) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/ccomplex)|since C++11,
deprecated in C++17,
removed in C++20| +|[<ciso646>](http://eel.is/c++draft/depr.iso646.h.syn)|[en](https://en.cppreference.com/w/cpp/header/ciso646) / [jp](https://ja.cppreference.com/w/cpp/header/ciso646) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/ciso646) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/ciso646) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/ciso646)|removed in C++20| +|[<codecvt>](http://eel.is/c++draft/depr.codecvt.syn)|[en](https://en.cppreference.com/w/cpp/header/codecvt) / [jp](https://ja.cppreference.com/w/cpp/header/codecvt) / [cpprefjp](https://cpprefjp.github.io/reference/codecvt.html)|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/codecvt) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/codecvt) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/codecvt)|since C++11,
deprecated in C++17,
removed in C++26| +|[<cstdalign>](http://eel.is/c++draft/depr.stdalign.h.syn)|[en](https://en.cppreference.com/w/cpp/header/cstdalign) / [jp](https://ja.cppreference.com/w/cpp/header/cstdalign) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cstdalign) / libc++ / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cstdalign)|since C++11,
deprecated in C++17,
removed in C++20| +|[<cstdbool>](http://eel.is/c++draft/depr.stdbool.h.syn)|[en](https://en.cppreference.com/w/cpp/header/cstdbool) / [jp](https://ja.cppreference.com/w/cpp/header/cstdbool) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/cstdbool) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/cstdbool) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/cstdbool)|since C++11,
deprecated in C++17,
removed in C++20| +|[<ctgmath>](http://eel.is/c++draft/depr.tgmath.h.syn)|[en](https://en.cppreference.com/w/cpp/header/ctgmath) / [jp](https://ja.cppreference.com/w/cpp/header/ctgmath) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/c_global/ctgmath) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/ctgmath) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/ctgmath)|since C++11,
deprecated in C++17,
removed in C++20| +|[<strstream>](http://eel.is/c++draft/depr.strstream.syn)|[en](https://en.cppreference.com/w/cpp/header/strstream) / [jp](https://ja.cppreference.com/w/cpp/header/strstream) / cpprefjp|[libstdc++](https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/include/backward/strstream) / [libc++](https://github.com/llvm/llvm-project/blob/main/libcxx/include/strstream) / [MSVC](https://github.com/microsoft/STL/blob/main/stl/inc/strstream)|deprecated in C++98| diff --git a/docs/standardization/images/npaperbot-1.png b/docs/standardization/images/npaperbot-1.png new file mode 100644 index 0000000..10c8bee Binary files /dev/null and b/docs/standardization/images/npaperbot-1.png differ diff --git a/docs/standardization/images/npaperbot-2.png b/docs/standardization/images/npaperbot-2.png new file mode 100644 index 0000000..5119f25 Binary files /dev/null and b/docs/standardization/images/npaperbot-2.png differ diff --git a/docs/standardization/images/npaperbot-3.png b/docs/standardization/images/npaperbot-3.png new file mode 100644 index 0000000..b650798 Binary files /dev/null and b/docs/standardization/images/npaperbot-3.png differ diff --git a/docs/standardization/images/npaperbot-4.png b/docs/standardization/images/npaperbot-4.png new file mode 100644 index 0000000..5ad281f Binary files /dev/null and b/docs/standardization/images/npaperbot-4.png differ diff --git a/docs/standardization/images/npaperbot-5.png b/docs/standardization/images/npaperbot-5.png new file mode 100644 index 0000000..647fe67 Binary files /dev/null and b/docs/standardization/images/npaperbot-5.png differ diff --git a/docs/standardization/images/npaperbot-6.png b/docs/standardization/images/npaperbot-6.png new file mode 100644 index 0000000..2806833 Binary files /dev/null and b/docs/standardization/images/npaperbot-6.png differ diff --git a/docs/standardization/images/npaperbot-7.png b/docs/standardization/images/npaperbot-7.png new file mode 100644 index 0000000..cb91a1d Binary files /dev/null and b/docs/standardization/images/npaperbot-7.png differ diff --git a/docs/standardization/meetings.md b/docs/standardization/meetings.md index a1ef66b..a891796 100644 --- a/docs/standardization/meetings.md +++ b/docs/standardization/meetings.md @@ -1,37 +1,144 @@ -description: C++ の規格を議論する C++ 標準化委員会の主要会議の開催情報 +description: C++ への提案文書を議論して承認する C++ 標準化委員会の主要会議の開催情報 # 標準化会議 -C++ の規格を議論する C++ 標準化委員会の主要会議の開催情報です。 +C++ への提案文書を議論して承認する C++ 標準化委員会の全体会議の開催情報です。 + +## 2026 Búzios +- [2026-11-16 to 21](https://wg21.link/N5021) / ブジオス, リオデジャネイロ州, ブラジル + +## 2026 Brno +- [2026-06-08 to 13](https://wg21.link/N5011) / ブルノ, チェコ + +## 2026 Croydon +- [2026-03-23 to 28](https://wg21.link/N5024) / クロイドン, ロンドン, 英国 + +## 2025 Kona +- [2025-11-03 to 08](https://wg21.link/N4977) / コナ, ハワイ州, 米国 + +## 2025 Sofia +- [2025-06-16 to 21](https://wg21.link/N4991) / ソフィア, ブルガリア + +## 2025 Hagenberg +- [2025-02-10 to 15](https://wg21.link/N4997) / ハーゲンベルク, オーストリア + +## 2024 Wrocław +- [2024-11-18 to 23](https://wg21.link/N4974) / ヴロツワフ, ポーランド + +## 2024 St. Louis +- [2024-06-24 to 29](https://wg21.link/N4966) / セントルイス, ミズーリ州, 米国 + +## 2024 Tokyo +#### 場所 +- [2024-03-18 to 23](https://wg21.link/N4961) / 東京, 日本 + +## 2023 Kona +#### 場所 +- [2023-11-06 to 11](https://wg21.link/N4936) / コナ, ハワイ州, 米国 + +## 2023 Varna +#### 場所 +- [2023-06-12 to 17](https://wg21.link/N4935) / ヴァルナ, ブルガリア + +## 2023 Issaquah +#### 場所 +- [2023-02-06 to 11](https://wg21.link/N4925) / イサクア, ワシントン州, 米国 + +## 2022 Kona +#### 場所 +- 2022-11-07 to 12 / コナ, ハワイ州, 米国 + +## July 2022 Virtual +#### 場所 +- 2022-07-25 / オンライン + +## February 2022 Virtual +#### 場所 +- [2022-02-07](https://wg21.link/N4900) / オンライン + +## October 2021 Virtual +#### 場所 +- 2021-10-04 / オンライン + +## June 2021 Virtual +#### 場所 +- 2021-06-07 / オンライン + +#### 参加報告 +- [Trip report: Summer 2021 ISO C++ standards meeting (virtual)](https://herbsutter.com/2021/06/09/trip-report-summer-2021-iso-c-standards-meeting-virtual/) by Herb Sutter + +## 2021 Varna +#### 場所 +- 2020-5-31 to 06-05 / ヴァルナ, ブルガリア (2021 年に以降に開催再延期) ## 2021 Kona #### 場所 -- 2021-02 / コナ, ハワイ州, 米国 +- [2021-02-22 to 27](https://wg21.link/N4832) / コナ, ハワイ州, 米国 (2021 年以降に開催延期) -## 2020 New York (予定) +## February 2021 Virtual #### 場所 -- 2020-11 / ニューヨーク, ニューヨーク州, 米国 +- [2021-02-22](https://wg21.link/N4880) / オンライン + +#### 参加報告 +- [Trip report: Winter 2021 ISO C++ standards meeting (virtual)](https://herbsutter.com/2021/02/22/trip-report-winter-2021-iso-c-standards-meeting-virtual/) by Herb Sutter -## 2020 Bulgaria +## November 2020 Virtual #### 場所 -- 2020-06-01 to 06 / ブルガリア +- [2020-11-09](https://wg21.link/N4863) / オンライン -## 2020 Prague +#### 参加報告 +- [Trip report: Autumn ISO C++ standards meeting (virtual)](https://herbsutter.com/2020/11/13/trip-report-autumn-iso-c-standards-meeting-virtual/) by Herb Sutter + +## 2020 New York #### 場所 -- 2020-02-10 to 15 / プラハ, チェコ +- [2020-11-09 to 14](https://wg21.link/n4848) / ニューヨーク, ニューヨーク州, 米国 (2021 年以降に開催延期) -## 2019 Belfast +## 2020 Varna #### 場所 +- [2020-06-01 to 06](https://wg21.link/n4837) / ヴァルナ, ブルガリア ([2021 年に開催延期](https://cppmap.github.io/standardization/meetings/#2021-varna)) + +## 2020 Prague +#### 場所 / 提案 / 会議の結果 +- [2020-02-10 to 15](https://wg21.link/n4817) / プラハ, チェコ +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-01 pre-Prague](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-01) +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-03 post-Prague](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-03) + +#### 参加報告 +- [2020-02 Prague ISO C++ Committee Trip Report](https://www.reddit.com/r/cpp/comments/f47x4o/202002_prague_iso_c_committee_trip_report_c20_is/) by Bryce Lelbach and others +- [Trip report: Winter ISO C++ standards meeting (Prague)](https://herbsutter.com/2020/02/15/trip-report-winter-iso-c-standards-meeting-prague/) by Herb Sutter +- [WG21 in Prague - (Partial) Trip Report](https://www.reddit.com/user/InbalL/comments/f5ftop/wg21_in_prague_partial_trip_report/) by Inbal Levi +- [Freestanding in Prague](https://www.reddit.com/r/cpp/comments/f5hgqm/freestanding_in_prague/) by Ben Craig +- [Trip Report: C++ Standards Meeting in Prague, February 2020](https://botondballo.wordpress.com/2020/03/12/trip-report-c-standards-meeting-in-prague-february-2020/) by Botond Ballo +- [Kafka’s uncle spends a week with Les Booloise: Prague trip report](https://hatcat.com/?p=119) by Guy Davidson +- [Trip report: February 2020 ISO C++ committee meeting, Prague](https://timur.audio/trip-report-february-2020-iso-c-committee-meeting-prague) by Timur Doumler + +## 2019 Belfast +#### 場所 / 提案 / 会議の結果 - [2019-11-04 to 09](https://wg21.link/n4782) / ベルファスト, 北アイルランド, 英国 +- [JTC1/SC22/WG21 - Papers 2019 mailing2019-10 pre-Belfast](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/#mailing2019-10) +- [JTC1/SC22/WG21 - Papers 2019 mailing2019-11 post-Belfast](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/#mailing2019-11) + +#### 参加報告 +- [2019-11 Belfast ISO C++ Committee Trip Report](https://www.reddit.com/r/cpp/comments/dtuov8/201911_belfast_iso_c_committee_trip_report/) by Bryce Lelbach and others +- [Trip report: Autumn ISO C++ standards meeting (Belfast)](https://herbsutter.com/2019/11/09/trip-report-autumn-iso-c-standards-meeting-belfast/) by Herb Sutter +- [WG21 in my own backyard: Belfast trip report](https://hatcat.com/?p=115) by Guy Davidson +- [Trip Report: Freestanding Errors in Belfast](https://www.reddit.com/r/cpp/comments/dvh72f/trip_report_freestanding_errors_in_belfast/) by Ben Craig +- [Belfast Trip Report](https://cppcast.com/timur-doumler-belfast/) by Timur Doumler +- [Trip Report: C++ Standards Meeting in Belfast, November 2019](https://botondballo.wordpress.com/2019/11/15/trip-report-c-standards-meeting-in-belfast-november-2019/) by Botond Ballo ## 2019 Cologne #### 場所 / 提案 / 会議の結果 - [2019-07-15 to 20](https://wg21.link/n4783) / ケルン, ドイツ - [JTC1/SC22/WG21 - Papers 2019 mailing2019-06 pre-Cologne](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/#mailing2019-06) -- JTC1/SC22/WG21 - Papers 2019 mailing2019-08 post-Cologne +- [JTC1/SC22/WG21 - Papers 2019 mailing2019-08 post-Cologne](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/#mailing2019-08) #### 参加報告 - [2019-07 Cologne ISO C++ Committee Trip Report](https://www.reddit.com/r/cpp/comments/cfk9de/201907_cologne_iso_c_committee_trip_report_the/) by Bryce Lelbach and others +- [Trip report: Summer ISO C++ standards meeting (Cologne)](https://herbsutter.com/2019/07/20/trip-report-summer-iso-c-standards-meeting-cologne/) by Herb Sutter +- [Trip Report: C++ Standards Meeting in Cologne, July 2019](https://botondballo.wordpress.com/2019/07/26/trip-report-c-standards-meeting-in-cologne-july-2019/) by Botond Ballo +- [The German tour: Cologne trip report](https://hatcat.com/?p=86) by Guy Davidson +- [Trip report: July 2019 ISO C++ committee meeting, Cologne, Germany](http://timur.audio/trip-report-july-2019-iso-c-committee-meeting-cologne-germany) by Timur Doumler +- [Trip Report: ISO C++ Meeting Cologne (2019)](https://www.silexica.com/news/iso_cpp_meeting_2019/) by Matthias Gehre #### 解説 `std::format` や `constexpr vector`, `using enum`, `constinit` など、前回の会議までにおおよそ完成していた多数の提案が C++20 ドラフト入りしました。一方で、2018 年にドラフト入りしていた Contracts は大幅な設計の見直しが発生し、C++20 での導入をキャンセルして Study Group で議論を続けることが決まりました。 @@ -44,13 +151,13 @@ C++ の規格を議論する C++ 標準化委員会の主要会議の開催情 - [JTC1/SC22/WG21 - Papers 2019 mailing2019-03 post-Kona](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/#mailing2019-03) #### 参加報告 -- [2019-02 Kona ISO C++ Committee Trip Report](https://www.reddit.com/r/cpp/comments/au0c4x/201902_kona_iso_c_committee_trip_report_c20/) by Bryce Lelbach and others -- [Trip report: Winter ISO C++ standards meeting (Kona)](https://herbsutter.com/2019/02/23/trip-report-winter-iso-c-standards-meeting-kona/) by Herb Sutter -- [Kona: A trip report](https://cor3ntin.github.io/posts/kona2019/) by Corentin -- [Trip report: February 2019 ISO C++ committee meeting, Kona, Hawai’i](http://timur.audio/trip-report-february-2019-iso-c-committee-meeting-kona-hawaii) by Timur Doumler -- [Telescopes and matrices and audio: Kona trip report](https://hatcat.com/?p=69) by Guy Davidson -- [Trip Report: Freestanding (and Modules) in Kona](https://www.reddit.com/r/cpp/comments/ax1z2y/trip_report_freestanding_and_modules_in_kona/) by Bryce Lelbach -- [Trip Report: C++ Standards Meeting in Kona, February 2019](https://botondballo.wordpress.com/2019/03/20/trip-report-c-standards-meeting-in-kona-february-2019/) by Botond Ballo +- [2019-02 Kona ISO C++ Committee Trip Report](https://www.reddit.com/r/cpp/comments/au0c4x/201902_kona_iso_c_committee_trip_report_c20/) by Bryce Lelbach and others +- [Trip report: Winter ISO C++ standards meeting (Kona)](https://herbsutter.com/2019/02/23/trip-report-winter-iso-c-standards-meeting-kona/) by Herb Sutter +- [Kona: A trip report](https://cor3ntin.github.io/posts/kona2019/) by Corentin +- [Trip report: February 2019 ISO C++ committee meeting, Kona, Hawai’i](http://timur.audio/trip-report-february-2019-iso-c-committee-meeting-kona-hawaii) by Timur Doumler +- [Telescopes and matrices and audio: Kona trip report](https://hatcat.com/?p=69) by Guy Davidson +- [Trip Report: Freestanding (and Modules) in Kona](https://www.reddit.com/r/cpp/comments/ax1z2y/trip_report_freestanding_and_modules_in_kona/) by Bryce Lelbach +- [Trip Report: C++ Standards Meeting in Kona, February 2019](https://botondballo.wordpress.com/2019/03/20/trip-report-c-standards-meeting-in-kona-february-2019/) by Botond Ballo #### 解説 コルーチンと、C++23 以降への先送りが見込まれていたモジュールの C++20 入りが承認され、C++20 は C++11 以来の大型アップデートになることが決まりました。 @@ -64,8 +171,8 @@ C++ の規格を議論する C++ 標準化委員会の主要会議の開催情 - [JTC1/SC22/WG21 - Papers 2018 mailing2018-11 post-San Diego](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/#mailing2018-11) #### 参加報告 -- [2018 San Diego ISO C++ Committee Trip Report](https://www.reddit.com/r/cpp/comments/9vwvbz/2018_san_diego_iso_c_committee_trip_report_ranges/) by Bryce Lelbach and others -- [Trip report: Fall ISO C++ standards meeting (San Diego)](https://herbsutter.com/2018/11/13/trip-report-fall-iso-c-standards-meeting-san-diego/) by Herb Sutter +- [2018 San Diego ISO C++ Committee Trip Report](https://www.reddit.com/r/cpp/comments/9vwvbz/2018_san_diego_iso_c_committee_trip_report_ranges/) by Bryce Lelbach and others +- [Trip report: Fall ISO C++ standards meeting (San Diego)](https://herbsutter.com/2018/11/13/trip-report-fall-iso-c-standards-meeting-san-diego/) by Herb Sutter - [Fall 2018 ISO WG21 C++ Standards Committee meeting trip report](https://developers.redhat.com/blog/2019/01/10/fall-2018-iso-wg21-c-standards-committee-meeting-trip-report/) #### 解説 @@ -78,8 +185,8 @@ Range ライブラリの C++20 入りが決まったほか、コンセプトの - [JTC1/SC22/WG21 - Papers 2018 mailing2018-06 post-Rapperswil](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/#mailing2018-06) #### 参加報告 -- [2018 Rapperswil ISO C++ Committee Trip Report (Contracts for C++20; Parallelism TS v2 published; Draft Reflection TS)](https://www.reddit.com/r/cpp/comments/8prqzm/2018_rapperswil_iso_c_committee_trip_report/) by Bryce Lelbach and others -- [Trip report: Summer ISO C++ standards meeting (Rapperswil)](https://herbsutter.com/2018/07/02/trip-report-summer-iso-c-standards-meeting-rapperswil/) by Herb Sutter +- [2018 Rapperswil ISO C++ Committee Trip Report (Contracts for C++20; Parallelism TS v2 published; Draft Reflection TS)](https://www.reddit.com/r/cpp/comments/8prqzm/2018_rapperswil_iso_c_committee_trip_report/) by Bryce Lelbach and others +- [Trip report: Summer ISO C++ standards meeting (Rapperswil)](https://herbsutter.com/2018/07/02/trip-report-summer-iso-c-standards-meeting-rapperswil/) by Herb Sutter #### 解説 属性構文による Contracts (契約プログラミング) の C++20 入りが決まったほか、STL へのコンセプトライブラリの追加、任意のクラス型の非型テンプレートパラメータとしての利用、定数式での仮想関数呼び出しの許可、`explicit(bool)` などが承認されました。 @@ -91,8 +198,8 @@ Range ライブラリの C++20 入りが決まったほか、コンセプトの - [JTC1/SC22/WG21 - Papers 2018 mailing2018-04 post-Jacksonville](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/#mailing2018-04) #### 参加報告 -- [2018 Jacksonville ISO C++ Committee Reddit Trip Report](https://www.reddit.com/r/cpp/comments/854mu9/2018_jacksonville_iso_c_committee_reddit_trip/) by Bryce Lelbach and others -- [Trip report: Winter ISO C++ standards meeting (Jacksonville)](https://herbsutter.com/2018/07/02/trip-report-summer-iso-c-standards-meeting-rapperswil/) by Herb Sutter +- [2018 Jacksonville ISO C++ Committee Reddit Trip Report](https://www.reddit.com/r/cpp/comments/854mu9/2018_jacksonville_iso_c_committee_reddit_trip/) by Bryce Lelbach and others +- [Trip report: Winter ISO C++ standards meeting (Jacksonville)](https://herbsutter.com/2018/07/02/trip-report-summer-iso-c-standards-meeting-rapperswil/) by Herb Sutter #### 解説 `` へのカレンダーライブラリの追加、``, `no_unique_address` や `likely/unlikely` 属性構文の追加などが承認されました。 @@ -104,8 +211,8 @@ Range ライブラリの C++20 入りが決まったほか、コンセプトの - [JTC1/SC22/WG21 - Papers 2017 mailing2017-11 post-Albuquerque](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017#mailing2017-11) #### 参加報告 -- [2018 Jacksonville ISO C++ Committee Reddit Trip Report](https://www.reddit.com/r/cpp/comments/854mu9/2018_jacksonville_iso_c_committee_reddit_trip/) by Bryce Lelbach and others -- [Trip report: Fall ISO C++ standards meeting (Albuquerque)](https://herbsutter.com/2017/11/11/trip-report-fall-iso-c-standards-meeting-albuquerque/) by Herb Sutter +- [2018 Jacksonville ISO C++ Committee Reddit Trip Report](https://www.reddit.com/r/cpp/comments/854mu9/2018_jacksonville_iso_c_committee_reddit_trip/) by Bryce Lelbach and others +- [Trip report: Fall ISO C++ standards meeting (Albuquerque)](https://herbsutter.com/2017/11/11/trip-report-fall-iso-c-standards-meeting-albuquerque/) by Herb Sutter #### 解説 三方比較演算子 `<=>` とそのライブラリサポート、標準ライブラリ関数のさらなる `constexpr` 対応、初期化式をともなう範囲 for 文などの C++20 入りが承認されました。 @@ -117,8 +224,8 @@ Range ライブラリの C++20 入りが決まったほか、コンセプトの - [JTC1/SC22/WG21 - Papers 2017 mailing2017-07 post-Toronto](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017#mailing2017-07) #### 参加報告 -- [2017 Toronto ISO C++ Committee Discussion Thread (Concepts in C++20; Coroutines, Ranges and Networking TSes published)](https://www.reddit.com/r/cpp/comments/6ngkgc/2017_toronto_iso_c_committee_discussion_thread/) by Bryce Lelbach and others -- [Trip report: Summer ISO C++ standards meeting (Toronto)](https://herbsutter.com/2017/07/15/trip-report-summer-iso-c-standards-meeting-toronto/) by Herb Sutter +- [2017 Toronto ISO C++ Committee Discussion Thread (Concepts in C++20; Coroutines, Ranges and Networking TSes published)](https://www.reddit.com/r/cpp/comments/6ngkgc/2017_toronto_iso_c_committee_discussion_thread/) by Bryce Lelbach and others +- [Trip report: Summer ISO C++ standards meeting (Toronto)](https://herbsutter.com/2017/07/15/trip-report-summer-iso-c-standards-meeting-toronto/) by Herb Sutter - [Trip Report: C++ Standards Meeting in Toronto, July 2017](https://botondballo.wordpress.com/2017/08/02/trip-report-c-standards-meeting-in-toronto-july-2017/) #### 解説 @@ -132,8 +239,8 @@ C++20 に関する最初の会議です。コンセプト、Designated Initializ #### 参加報告 -- [Trip report: Winter ISO C++ standards meeting (Kona), C++17 is complete](https://herbsutter.com/2017/03/24/trip-report-winter-iso-c-standards-meeting-kona-c17-is-complete/) by Herb Sutter -- [Red Hat at the ISO C++ Standards Meeting (April 2017, Kona): Core Language](https://developers.redhat.com/blog/2017/06/27/red-hat-at-the-iso-c-standards-meeting-april-2017-kona-core-language/) by Jason Merrill +- [Trip report: Winter ISO C++ standards meeting (Kona), C++17 is complete](https://herbsutter.com/2017/03/24/trip-report-winter-iso-c-standards-meeting-kona-c17-is-complete/) by Herb Sutter +- [Red Hat at the ISO C++ Standards Meeting (April 2017, Kona): Core Language](https://developers.redhat.com/blog/2017/06/27/red-hat-at-the-iso-c-standards-meeting-april-2017-kona-core-language/) by Jason Merrill #### 解説 C++17 について議論する最後の会議で、この会議によって C++17 規格が完成しました。 @@ -149,9 +256,9 @@ C++17 について議論する最後の会議で、この会議によって C++1 - [JTC1/SC22/WG21 - Papers 2016 mailing2016-11 post-Issaquah](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/#mailing2016-11) #### 参加報告 -- [Trip report: Fall ISO C++ standards meeting (Issaquah)](https://herbsutter.com/2016/11/15/trip-report-fall-iso-c-standards-meeting-issaquah/) by Herb Sutter +- [Trip report: Fall ISO C++ standards meeting (Issaquah)](https://herbsutter.com/2016/11/15/trip-report-fall-iso-c-standards-meeting-issaquah/) by Herb Sutter - [2016 Issaquah ISO C++ Committee Meeting Live Thread](https://www.reddit.com/r/cpp/comments/5chf36/2016_issaquah_iso_c_committee_meeting_live_thread/) -- [The view from Nov 2016 C++ Standard Meeting Issaquah](https://www.codeplay.com/portal/12-09-16-the-view-from-nov-2016-cpp-standard-meeting-issaquah) by Michael Wong +- [The view from Nov 2016 C++ Standard Meeting Issaquah](https://www.codeplay.com/portal/12-09-16-the-view-from-nov-2016-cpp-standard-meeting-issaquah) by Michael Wong #### 解説 `using` 宣言でのパラメータパック展開、古い例外仕様 `throw()` の削除、`` 等が承認されました。 @@ -164,9 +271,9 @@ C++17 について議論する最後の会議で、この会議によって C++1 - [JTC1/SC22/WG21 - Papers 2016 mailing2016-07 post-Oulu](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/#mailing2016-07) #### 参加報告 -- [Trip report: Summer ISO C++ standards meeting (Oulu)](https://herbsutter.com/2016/06/30/trip-report-summer-iso-c-standards-meeting-oulu/) by Herb Sutter -- [Red Hat at the ISO C++ Standards Meeting (June 2016, Oulu): Library](https://developers.redhat.com/blog/2016/07/18/red-hat-at-the-iso-c-standards-meeting-june-2016-oulu-library/) by Jonathan Wakely -- [C++17, All Final Features from Oulu in a Few Slides](https://www.codeplay.com/portal/c17-all-final-features-from-oulu-in-a-few-slides) by Michael Wong +- [Trip report: Summer ISO C++ standards meeting (Oulu)](https://herbsutter.com/2016/06/30/trip-report-summer-iso-c-standards-meeting-oulu/) by Herb Sutter +- [Red Hat at the ISO C++ Standards Meeting (June 2016, Oulu): Library](https://developers.redhat.com/blog/2016/07/18/red-hat-at-the-iso-c-standards-meeting-june-2016-oulu-library/) by Jonathan Wakely +- [C++17, All Final Features from Oulu in a Few Slides](https://www.codeplay.com/portal/c17-all-final-features-from-oulu-in-a-few-slides) by Michael Wong #### 解説 コア言語機能として、クラステンプレートのテンプレート引数推論(deduction guide)、インライン変数、`constexpr if`, 構造化束縛、if 文や switch 文での初期化式と条件式の分離、コピー省略保証、式の評価順序の厳密化、`std::launder` 等が承認されました。 @@ -179,9 +286,9 @@ C++17 について議論する最後の会議で、この会議によって C++1 - [JTC1/SC22/WG21 - Papers 2016 mailing2016-03 post-Jacksonville](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/#mailing2016-03) #### 参加報告 -- [Trip report: Winter ISO C++ standards meeting](https://herbsutter.com/2016/03/11/trip-report-winter-iso-c-standards-meeting/) by Herb Sutter -- [Trip Report: C++ Standards Meeting in Jacksonville, February 2016](https://botondballo.wordpress.com/2016/03/21/trip-report-c-standards-meeting-in-jacksonville-february-2016/) by Botond Ballo -- [Trip report: C++ meeting at Jacksonville](https://usingstdcpp.org/2016/03/05/trip-report-c-meeting-at-jacksonville/) by J. Daniel Garcia +- [Trip report: Winter ISO C++ standards meeting](https://herbsutter.com/2016/03/11/trip-report-winter-iso-c-standards-meeting/) by Herb Sutter +- [Trip Report: C++ Standards Meeting in Jacksonville, February 2016](https://botondballo.wordpress.com/2016/03/21/trip-report-c-standards-meeting-in-jacksonville-february-2016/) by Botond Ballo +- [Trip report: C++ meeting at Jacksonville](https://usingstdcpp.org/2016/03/05/trip-report-c-meeting-at-jacksonville/) by J. Daniel Garcia #### 解説 16 進浮動小数点リテラル、constexpr ラムダ、属性構文 `[[fallthrough]]`, `[[nodiscard]]`, `[[maybe_unused]]` のほか、標準ライブラリに `std::any`, `std::optional`, `std::string_view`, ``, ``, 並列アルゴリズム、数学の特殊関数等を追加することが承認されました。 @@ -193,8 +300,8 @@ C++17 について議論する最後の会議で、この会議によって C++1 - [JTC1/SC22/WG21 - Papers 2015 mailing2015-11 post-Kona](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/#mailing2015-11) #### 参加報告 -- [Trip report: Fall 2015 ISO C++ standards meeting](https://herbsutter.com/2015/10/25/2568/) by Herb Sutter -- [Trip Report: C++ Standards Meeting in Kona, October 2015](https://botondballo.wordpress.com/2015/11/09/trip-report-c-standards-meeting-in-kona-october-2015/) by J. Daniel Garcia +- [Trip report: Fall 2015 ISO C++ standards meeting](https://herbsutter.com/2015/10/25/2568/) by Herb Sutter +- [Trip Report: C++ Standards Meeting in Kona, October 2015](https://botondballo.wordpress.com/2015/11/09/trip-report-c-standards-meeting-in-kona-october-2015/) by J. Daniel Garcia - [C++17 progress update! (Oct 2015)](https://www.reddit.com/r/cpp/comments/3q4agc/c17_progress_update_oct_2015/) #### 解説 @@ -207,9 +314,9 @@ C++17 について議論する最後の会議で、この会議によって C++1 - [JTC1/SC22/WG21 - Papers 2015 mailing2015-05 post-Lenexa](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/#mailing2015-05) #### 参加報告 -- [Trip report: Spring ISO C++ meeting](https://isocpp.org/blog/2015/06/trip-report-spring-iso-cpp-meeting) by Herb Sutter -- [Trip Report: C++ Standards Meeting in Lenexa, May 2015](https://botondballo.wordpress.com/2015/06/05/trip-report-c-standards-meeting-in-lenexa-may-2015/) by J. Daniel Garcia -- [Lenexa C++ Meeting Report (Core Language)](https://developers.redhat.com/blog/2015/06/10/lenexa-c-meeting-report-core-language/) by Jason Merrill +- [Trip report: Spring ISO C++ meeting](https://isocpp.org/blog/2015/06/trip-report-spring-iso-cpp-meeting) by Herb Sutter +- [Trip Report: C++ Standards Meeting in Lenexa, May 2015](https://botondballo.wordpress.com/2015/06/05/trip-report-c-standards-meeting-in-lenexa-may-2015/) by J. Daniel Garcia +- [Lenexa C++ Meeting Report (Core Language)](https://developers.redhat.com/blog/2015/06/10/lenexa-c-meeting-report-core-language/) by Jason Merrill - [C++17 progress update!](https://www.reddit.com/r/cpp/comments/35g7f6/c17_progress_update/) #### 解説 @@ -228,9 +335,9 @@ C++17 について議論する最後の会議で、この会議によって C++1 - [JTC1/SC22/WG21 - Papers 2014 mailing2014-11 post-Urbana](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/#mailing2014-11) #### 参加報告 -- [Trip Report: Fall ISO C++ Meeting](https://isocpp.org/blog/2014/11/trip-report-fall) by Herb Sutter -- [Trip Report: C++ Standards Meeting in Urbana-Champaign, November 2014](https://botondballo.wordpress.com/2014/11/23/trip-report-c-standards-meeting-in-urbana-champaign-november-2014/) by J. Daniel Garcia -- [Red Hat at the ISO C++ Standards Meeting (November 2014): Library](https://developers.redhat.com/blog/2014/12/16/red-hat-at-the-iso-c-standards-meeting-november-2014-library/) by Jason Merrill +- [Trip Report: Fall ISO C++ Meeting](https://isocpp.org/blog/2014/11/trip-report-fall) by Herb Sutter +- [Trip Report: C++ Standards Meeting in Urbana-Champaign, November 2014](https://botondballo.wordpress.com/2014/11/23/trip-report-c-standards-meeting-in-urbana-champaign-november-2014/) by J. Daniel Garcia +- [Red Hat at the ISO C++ Standards Meeting (November 2014): Library](https://developers.redhat.com/blog/2014/12/16/red-hat-at-the-iso-c-standards-meeting-november-2014-library/) by Jason Merrill #### 解説 C++14 規格完成後の最初の会議です。 @@ -244,8 +351,8 @@ C++14 規格完成後の最初の会議です。 - [JTC1/SC22/WG21 - Papers 2014 mailing2014-07 post-Rapperswil](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/#mailing2014-07) #### 参加報告 -- [Trip Report: C++ Standards Meeting in Urbana-Champaign, November 2014](http://www.theres-waldo.ca/2014/07/17/trip-report-c-standards-committee-meeting-in-rapperswil-june-2014/) by J. Daniel Garcia -- [Red Hat at the ISO C++ Standards Meeting (November 2014): Library](https://developers.redhat.com/blog/2014/08/21/iso-cxx-meeting-rapperswil-2014-core-library/) by Jonathan Wakely, Jason Merrill, Matt Newsome +- [Trip Report: C++ Standards Meeting in Urbana-Champaign, November 2014](http://www.theres-waldo.ca/2014/07/17/trip-report-c-standards-committee-meeting-in-rapperswil-june-2014/) by J. Daniel Garcia +- [Red Hat at the ISO C++ Standards Meeting (November 2014): Library](https://developers.redhat.com/blog/2014/08/21/iso-cxx-meeting-rapperswil-2014-core-library/) by Jonathan Wakely, Jason Merrill, Matt Newsome #### 解説 C++14 について議論する最後の会議で、この会議によって C++14 規格が完成しました。 @@ -258,25 +365,68 @@ C++14 への機能追加はなく、C++17 に対しては、トライグラフ - [JTC1/SC22/WG21 - Papers 2014 mailing2014-03 post-Issaquah](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/#mailing2014-03) #### 参加報告 -- [Trip report: Winter ISO C++ meeting](https://isocpp.org/blog/2014/02/trip-report) by Herb Sutter -- [Trip Report: C++ Standards Committee Meeting in Issaquah, February 2014](http://theres-waldo.ca/2014/02/22/trip-report-c-standards-committee-meeting-in-issaquah-february-2014/) by J. Daniel Garcia -- [Red Hat at the ISO C++ Standards Meeting (February 2014)](https://developers.redhat.com/blog/2014/05/28/red-hat-iso-c-standards-meeting-february-2014/) by Matt Newsome +- [Trip report: Winter ISO C++ meeting](https://isocpp.org/blog/2014/02/trip-report) by Herb Sutter +- [Trip Report: C++ Standards Committee Meeting in Issaquah, February 2014](http://theres-waldo.ca/2014/02/22/trip-report-c-standards-committee-meeting-in-issaquah-february-2014/) by J. Daniel Garcia +- [Red Hat at the ISO C++ Standards Meeting (February 2014)](https://developers.redhat.com/blog/2014/05/28/red-hat-iso-c-standards-meeting-february-2014/) by Matt Newsome #### 解説 C++14 の最終作業と C++17 に向けた一部の作業が行われました。 どちらに対しても機能の追加はなく、C++14 に対しては各国委員会からのコメントや既存の Issue への対応が主です。 + ### 2013 Chicago +#### 場所 / 提案 / 会議の結果 - 2013-09-23 to 28 / シカゴ, イリノイ州, 米国 +- [JTC1/SC22/WG21 - Papers 2013 mailing2013-09-pre-Chicago](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/#mailing2013-09) +- [JTC1/SC22/WG21 - Papers 2013 mailing2013-10-post-Chicago](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/#mailing2013-10) + +#### 参加報告 +- [Trip report: Fall ISO C++ meeting](https://isocpp.org/blog/2013/10/trip-report-fall-iso-c-meeting) by Herb Sutter + +#### 解説 + +数値リテラルの区切り文字、`[[deprecated]]` 属性、引数としてサイズをとるグローバル `delete` 演算子のオーバーロードの許可等が承認されました。 +また、前回会議で承認されていた動的配列のサポートおよび `std::dynarray` と `std::optional` は C++14 から取り除かれることになりました。 + ### 2013 Bristol +#### 場所 / 提案 / 会議の結果 - 2013-04-15 to 20 / ブリストル, イングランド, 英国 +- [JTC1/SC22/WG21 - Papers 2013 mailing2013-03-pre-Bristol](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/#mailing2013-03) +- [JTC1/SC22/WG21 - Papers 2013 mailing2013-05-post-Bristol](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/#mailing2013-05) + +#### 参加報告 +- [Trip Report: ISO C++ Spring 2013 Meeting](https://isocpp.org/blog/2013/04/trip-report-iso-c-spring-2013-meeting) by Herb Sutter +- [The view from C++ Standard meeting April 2013 Part 1](https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/the_view_from_c_standard_meeting_april_2013_part_1?lang=en) by Michael Wong +- [A look at C++14: Papers Part I](https://www.meetingcpp.com/blog/items/a-look-at-cpp14-papers-part-1.html) by Jens Weller +- [A look at C++14: Papers Part 2](https://www.meetingcpp.com/blog/items/a-look-at-c14-papers-part-2.html) by Jens Weller +- [A look at C++14 and beyond: Papers Part 3](http://www.meetingcpp.com/index.php/br/items/a-look-at-c14-and-beyond-papers-part-3.html) by Jens Weller +- [A look at C++14 and beyond: Papers Part 4](https://www.meetingcpp.com/blog/items/a-look-at-c14-and-beyond-papers-part-4.html) by Jens Weller + +#### 解説 +コア言語機能として、`constexpr` の制限緩和、ジェネリックラムダ、ラムダ式の初期化キャプチャ、変数テンプレート、関数の戻り値型推論、動的配列のサポート、ライブラリ機能として、`std::make_unique()`, 標準ライブラリへのユーザー定義リテラル導入、`std::optional`, `std::dynarray` 等が承認されました。 +C++14 のほとんどの機能がこの会議で追加されています。 ### 2012 Portland +#### 場所 / 提案 / 会議の結果 - 2012-10-15 to 19 / ポートランド, オレゴン州, 米国 +- [JTC1/SC22/WG21 - Papers 2012 mailing2012-09-pre-Portland](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/#mailing2012-09) +- [JTC1/SC22/WG21 - Papers 2012 mailing2012-11-post-Portland](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/#mailing2012-11) + +#### 解説 +Issue 対応が主で大きな機能の追加はありませんでした。 +ライブラリ機能として、`std::complex`, `std::chrono`, `std::array`, `std::initilizer_list`, `std::tuple`, `std::pair` 等の `constexpr` 対応が承認されました。 ### 2012 Kona +#### 場所 / 提案 / 会議の結果 - 2012-02-06 to 10 / コナ, ハワイ州, 米国 +- [JTC1/SC22/WG21 - Papers 2012 mailing2012-01-pre-Portland](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/#mailing2012-01) +- [JTC1/SC22/WG21 - Papers 2012 mailing2012-02-post-Portland](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/#mailing2012-02) + +#### 解説 +C++14 について議論する最初の会議です。 +機能の追加は無く、C++11 に対する Issue への対応が主です。 + ### 2011 Bloomington - 2011-08-15 to 19 / ブルーミントン, インディアナ州, 米国 diff --git a/docs/standardization/proposals.md b/docs/standardization/proposals.md new file mode 100644 index 0000000..3f5fd34 --- /dev/null +++ b/docs/standardization/proposals.md @@ -0,0 +1,139 @@ +description: C++ 標準化委員会で議論される提案リストと日本語解説へのリンク + +# 提案リスト + +C++ 標準化委員会の提案文書と、その日本語解説記事へのリンクです。 + +### 2026 年 +- [JTC1/SC22/WG21 - Papers 2026 mailing2026-02](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/#mailing2026-02){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2026 mailing2026-01](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/#mailing2026-01){:target="_blank"} + +### 2025 年 +- [JTC1/SC22/WG21 - Papers 2025 mailing2025-12](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/#mailing2025-12){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2025 mailing2025-10](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/#mailing2025-10){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2025年10月)](https://onihusube.hatenablog.com/entry/2026/03/01/204210){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2025 mailing2025-09](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/#mailing2025-09){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2025年09月)](https://onihusube.hatenablog.com/entry/2026/01/31/012640){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2025 mailing2025-08](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/#mailing2025-08){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2025年08月)](https://onihusube.hatenablog.com/entry/2026/01/18/210314){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2025 mailing2025-07](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/#mailing2025-07){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2025年07月)](https://onihusube.hatenablog.com/entry/2026/01/16/235211){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2025 mailing2025-05](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/#mailing2025-05){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2025年05月)](https://onihusube.hatenablog.com/entry/2025/12/16/230316){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2025 mailing2025-04](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/#mailing2025-04){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2025年04月)](https://onihusube.hatenablog.com/entry/2025/10/17/135531){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2025 mailing2025-03](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/#mailing2025-03){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2025年03月)](https://onihusube.hatenablog.com/entry/2025/09/30/224815){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2025 mailing2025-01](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/#mailing2025-01){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2025年01月)](https://onihusube.hatenablog.com/entry/2025/08/30/234243){:target="_blank"} + +### 2024 年 +- [JTC1/SC22/WG21 - Papers 2024 mailing2024-12](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-12){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2024年12月)](https://onihusube.hatenablog.com/entry/2025/05/18/195724){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2024 mailing2024-10](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-10){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2024年10月)](https://onihusube.hatenablog.com/entry/2025/04/20/205527){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2024 mailing2024-09](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-09){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2024年09月)](https://onihusube.hatenablog.com/entry/2025/02/24/215818){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2024 mailing2024-08](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-08){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2024年08月)](https://onihusube.hatenablog.com/entry/2025/01/26/185126){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2024 mailing2024-07](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-07){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2024年07月)](https://onihusube.hatenablog.com/entry/2025/01/13/204945){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2024 mailing2024-05](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-05){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2024年05月)](https://onihusube.hatenablog.com/entry/2024/11/24/155428){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2024 mailing2024-04](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-04){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2024年04月)](https://onihusube.hatenablog.com/entry/2024/08/31/233056){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2024 mailing2024-02](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-02){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2024年02月)](https://onihusube.hatenablog.com/entry/2024/05/18/235613){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2024 mailing2024-01](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/#mailing2024-01){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2024年01月)](https://onihusube.hatenablog.com/entry/2024/03/10/170322){:target="_blank"} + +### 2023 年 +- [JTC1/SC22/WG21 - Papers 2023 mailing2023-12](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/#mailing2023-12){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2023年12月)](https://onihusube.hatenablog.com/entry/2024/02/29/191439){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2023 mailing2023-10](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/#mailing2023-10){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2023年10月)](https://onihusube.hatenablog.com/entry/2024/01/08/203712){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2023 mailing2023-09](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/#mailing2023-09){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2023年09月)](https://onihusube.hatenablog.com/entry/2023/10/29/180915){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2023 mailing2023-08](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/#mailing2023-08){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2023年08月)](https://onihusube.hatenablog.com/entry/2023/10/14/223052){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2023 mailing2023-07](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/#mailing2023-07){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2023年07月)](https://onihusube.hatenablog.com/entry/2023/09/23/203644){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2023 mailing2023-05](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/#mailing2023-05){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2023年05月)](https://onihusube.hatenablog.com/entry/2023/07/08/205803){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2023 mailing2023-04](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/#mailing2023-04){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2023年04月)](https://onihusube.hatenablog.com/entry/2023/04/23/192236){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2023 mailing2023-02](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/#mailing2023-02){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2023年02月)](https://onihusube.hatenablog.com/entry/2023/03/19/184146){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2023 mailing2023-01](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/#mailing2023-01){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2023年01月)](https://onihusube.hatenablog.com/entry/2023/02/12/210302){:target="_blank"} + + +### 2022 年 +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-11](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-11){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年11月)](https://onihusube.hatenablog.com/entry/2022/12/25/175304){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-10](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-10){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年10月)](https://onihusube.hatenablog.com/entry/2022/11/13/233529){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-09](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-09){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年09月)](https://onihusube.hatenablog.com/entry/2022/10/09/021557){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-08](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-08){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年08月)](https://onihusube.hatenablog.com/entry/2022/09/04/141015){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-07](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-07){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年07月)](https://onihusube.hatenablog.com/entry/2022/08/11/193828){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-06](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-06){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年06月)](https://onihusube.hatenablog.com/entry/2022/07/09/160343){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-05](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-05){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年05月)](https://onihusube.hatenablog.com/entry/2022/06/11/191943){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-04](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-04){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年04月)](https://onihusube.hatenablog.com/entry/2022/05/08/195618){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-03](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-03){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年03月)](https://onihusube.hatenablog.com/entry/2022/04/02/175835){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-02](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-02){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年02月)](https://onihusube.hatenablog.com/entry/2022/03/19/224729){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2022 mailing2022-01](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/#mailing2022-01){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2022年01月)](https://onihusube.hatenablog.com/entry/2022/02/19/181101){:target="_blank"} + +### 2021 年 +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-12](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-12){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年12月)](https://onihusube.hatenablog.com/entry/2022/01/10/235544){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-11](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-11){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年11月)](https://onihusube.hatenablog.com/entry/2021/12/11/220126){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-10](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-10){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年10月)](https://onihusube.hatenablog.com/entry/2021/11/13/193322){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-09](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-09){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年09月)](https://onihusube.hatenablog.com/entry/2021/10/03/193523){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-08](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-08){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年08月)](https://onihusube.hatenablog.com/entry/2021/09/03/230045){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-07](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-07){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年07月)](https://onihusube.hatenablog.com/entry/2021/08/14/213339){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-06](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-06){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年06月)](https://onihusube.hatenablog.com/entry/2021/07/12/182757){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-05](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-05){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年05月)](https://onihusube.hatenablog.com/entry/2021/06/13/165215){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-04](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-04){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年04月)](https://onihusube.hatenablog.com/entry/2021/05/14/214016){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-03](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-03){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年03月)](https://onihusube.hatenablog.com/entry/2021/04/10/222356){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-02](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-02){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年02月)](https://onihusube.hatenablog.com/entry/2021/03/12/225547){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2021 mailing2021-01](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/#mailing2021-01){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2021年01月)](https://onihusube.hatenablog.com/entry/2021/02/11/153333){:target="_blank"} + +### 2020 年 +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-12](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-12){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2020年12月)](https://onihusube.hatenablog.com/entry/2021/01/17/005823){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-11](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-11){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2020年11月)](https://onihusube.hatenablog.com/entry/2020/12/06/015108){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-10](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-10){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2020年10月)](https://onihusube.hatenablog.com/entry/2020/11/02/221657){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-09](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-09){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2020年9月)](https://onihusube.hatenablog.com/entry/2020/10/09/221025){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-08](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-08){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2020年8月)](https://onihusube.hatenablog.com/entry/2020/09/18/222444){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-07](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-07){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2020年7月)](https://onihusube.hatenablog.com/entry/2020/08/12/014639){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-06](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-06){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2020年6月)](https://onihusube.hatenablog.com/entry/2020/07/05/003248){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-05](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-05){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2020年5月)](https://onihusube.hatenablog.com/entry/2020/06/01/001003){:target="_blank"} +- [JTC1/SC22/WG21 - Papers 2020 mailing2020-04](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/#mailing2020-04){:target="_blank"} + - 日本語での解説: [WG21月次提案文書を眺める(2020年4月)](https://onihusube.hatenablog.com/entry/2020/05/01/194425){:target="_blank"} diff --git a/docs/standardization/status.md b/docs/standardization/status.md index ca8279a..ee55932 100644 --- a/docs/standardization/status.md +++ b/docs/standardization/status.md @@ -3,28 +3,44 @@ description: 各種 C++ 処理系の規格対応状況 # 処理系の対応状況 ## 処理系の比較表 -- [C++ compiler support](https://en.cppreference.com/w/cpp/compiler_support) +- [cppstat :material-open-in-new:](https://cppstat.dev/){:target="_blank"} + +## C++26 +- GCC: [C++26 Support in GCC](https://gcc.gnu.org/projects/cxx-status.html#cxx26) +- libstdc++: +- Clang: [C++26 implementation status](http://clang.llvm.org/cxx_status.html#cxx26) +- libc++: [libc++ C++26 Status](https://libcxx.llvm.org/Status/Cxx2c.html) +- Microsoft Visaul C++: +- Apple Clang: [C++26](https://developer.apple.com/xcode/cpp/#c++26) + +## C++23 +- GCC: [C++23 Support in GCC](https://gcc.gnu.org/projects/cxx-status.html#cxx23) +- libstdc++: [C++ 2023](https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2023) +- Clang: [C++23 implementation status](http://clang.llvm.org/cxx_status.html#cxx23) +- libc++: [libc++ C++23 Status](https://libcxx.llvm.org/Status/Cxx23.html) +- Microsoft Visaul C++: [Visual C++ Language Conformance](https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance) +- Apple Clang: [C++23](https://developer.apple.com/xcode/cpp/#c++23) ## C++20 - -- GCC: [C++2a Support in GCC](https://gcc.gnu.org/projects/cxx-status.html#cxx2a) -- libstdc++: [C++ 202a](https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2020) -- Clang: [C++2a implementation status](http://clang.llvm.org/cxx_status.html#cxx20) -- libc++: [libc++ C++2a Status](http://libcxx.llvm.org/cxx2a_status.html) +- GCC: [C++20 Support in GCC](https://gcc.gnu.org/projects/cxx-status.html#cxx20) +- libstdc++: [C++ 2020](https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2020) +- Clang: [C++20 implementation status](http://clang.llvm.org/cxx_status.html#cxx20) +- libc++: [libc++ C++20 Status](https://libcxx.llvm.org/Status/Cxx20.html) - Microsoft Visaul C++: [Visual C++ Language Conformance](https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance) +- Apple Clang: [C++20](https://developer.apple.com/xcode/cpp/#c++20) ## C++17 - - GCC: [C++17 Support in GCC](https://gcc.gnu.org/projects/cxx-status.html#cxx17) - libstdc++: [C++ 2017](https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017) - Clang: [C++17 implementation status](http://clang.llvm.org/cxx_status.html#cxx17) -- libc++: [libc++ C++17 Status](http://libcxx.llvm.org/cxx1z_status.html) +- libc++: [libc++ C++17 Status](https://libcxx.llvm.org/Status/Cxx17.html) - Microsoft Visaul C++: [Visual C++ Language Conformance](https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance) +- Apple Clang: [C++17](https://developer.apple.com/xcode/cpp/#c++17) ## C++14 - - GCC: [C++14 Support in GCC](https://gcc.gnu.org/projects/cxx-status.html#cxx14) - libstdc++: [C++ 2014](https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014) - Clang: [C++14 implementation status](http://clang.llvm.org/cxx_status.html#cxx14) -- libc++: [libc++ C++14 Status](http://libcxx.llvm.org/cxx1y_status.html) +- libc++: [libc++ C++14 Status](https://libcxx.llvm.org/Status/Cxx14.html) - Microsoft Visaul C++: [Visual C++ Language Conformance](https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance) +- Apple Clang: [C++14](https://developer.apple.com/xcode/cpp/#c++14) diff --git a/docs/standardization/working-drafts.md b/docs/standardization/working-drafts.md index c5621f1..f52a6ce 100644 --- a/docs/standardization/working-drafts.md +++ b/docs/standardization/working-drafts.md @@ -1,7 +1,41 @@ description: C++ 規格のワーキングドラフトです -# C++ 規格 -- [C++11 最終ワーキングドラフト (N3337)](https://wg21.link/std11) | [HTML 版](https://timsong-cpp.github.io/cppwp/n3337/) -- [C++14 最終ワーキングドラフト (N4140)](https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf?raw=true) | [HTML 版](https://timsong-cpp.github.io/cppwp/n4140/) -- [C++17 最終ワーキングドラフト (N4659)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf) | [HTML 版](https://timsong-cpp.github.io/cppwp/n4659/) -- [最新の C++20 ワーキングドラフト (N4810)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/n4810.pdf) | [HTML 版](http://eel.is/c++draft/) +# C++ 規格書 + +## 国際規格とワーキングドラフト + +C++11 以降は、規格書と同等の内容のワーキングドラフトが無償で公開されています。 +公式の国際規格文書は ISO の Web サイトから購入できます。 + +| バージョン | ワーキングドラフト | 国際規格 | ページ数 | 日付 | +|-------|--------------------------------------------------------------------------------------------|---------------------------------------------------------------|------|---------| +| C++98 | | [ISO/IEC 14882:1998 :material-open-in-new:](https://www.iso.org/standard/25845.html){:target="_blank"} | 732 | 1998-09 | +| C++03 | N1577 | [ISO/IEC 14882:2003 :material-open-in-new:](https://www.iso.org/standard/38110.html){:target="_blank"} | 757 | 2003-10 | +| C++11 | [N3337 (PDF) :material-open-in-new:](http://wg21.link/n3337){:target="_blank"} / [HTML :material-open-in-new:](https://timsong-cpp.github.io/cppwp/n3337/){:target="_blank"} | [ISO/IEC 14882:2011 :material-open-in-new:](https://www.iso.org/standard/50372.html){:target="_blank"} | 1338 | 2011-09 | +| C++14 | [N4140 (PDF) :material-open-in-new:](http://wg21.link/n4140){:target="_blank"} / [HTML :material-open-in-new:](https://timsong-cpp.github.io/cppwp/n4140/){:target="_blank"} | [ISO/IEC 14882:2014 :material-open-in-new:](https://www.iso.org/standard/64029.html){:target="_blank"} | 1358 | 2014-12 | +| C++17 | [N4659 (PDF) :material-open-in-new:](http://wg21.link/n4659){:target="_blank"} / [HTML :material-open-in-new:](https://timsong-cpp.github.io/cppwp/n4659/){:target="_blank"} | [ISO/IEC 14882:2017 :material-open-in-new:](https://www.iso.org/standard/68564.html){:target="_blank"} | 1605 | 2017-12 | +| C++20 | [N4860 (PDF) :material-open-in-new:](http://wg21.link/n4860){:target="_blank"} / [HTML :material-open-in-new:](https://timsong-cpp.github.io/cppwp/n4861/){:target="_blank"} | [ISO/IEC 14882:2020 :material-open-in-new:](https://www.iso.org/standard/79358.html){:target="_blank"} | 1853 | 2020-12 | +| C++23 | [N4950 (PDF) :material-open-in-new:](http://wg21.link/n4950){:target="_blank"} / [HTML :material-open-in-new:](https://timsong-cpp.github.io/cppwp/n4950/){:target="_blank"} | [ISO/IEC 14882:2024 :material-open-in-new:](https://www.iso.org/standard/83626.html){:target="_blank"} | 2104 | 2024-10 | +| C++26 | [N5032 (PDF) :material-open-in-new:](http://wg21.link/n5032){:target="_blank"} / [HTML :material-open-in-new:](http://eel.is/c++draft/){:target="_blank"}
※最終版ではない | (未発行) | ? | 2026-?? | + +- C++03 は日本語版 (JIS 規格) を無償で閲覧できます + - [日本産業標準調査会:データベース検索-JIS検索 :material-open-in-new:](https://www.jisc.go.jp/app/jis/general/GnrJISSearch.html) にて「X3014」を検索します + +## 過去の C++ の歴史的資料 + +| 日付 | 文書番号 | タイトル | ページ数 | +|------------|-------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------| +| 1990 年 2 月 | [X3J16 90-0004 の改稿版 :material-open-in-new:](https://drive.google.com/file/d/1XNzsgWMk0wfFOa5kjN9OV5a-04ttrdjE/view?usp=sharing){:target="_blank"} | The Annotated C++ Reference Manual | 160 | +| 1994 年 1 月 | [X3J16 94-0027 (N0414) :material-open-in-new:](https://drive.google.com/file/d/1EDQvAQSrQXHbUdN1Al7EvuOlIEhg1Hdl/view?usp=sharing){:target="_blank"} | Working Paper for Draft Proposed International Standard for Information Systems - Programming Language C++ | 454 | + + +## 参考文献 + +- History of C++ + https://en.cppreference.com/w/cpp/language/history +- C++ 各バージョン毎の規格書 + https://onihusube.hatenablog.com/entry/2018/07/04/014257 +- r/cpp VERY Early C++ Working Draft I found, February 1990 + https://www.reddit.com/r/cpp/comments/l33mmc/very_early_c_working_draft_i_found_february_1990/ +- r/cpp N0414: Working Paper from 25-January-1994 + https://www.reddit.com/r/cpp/comments/cgfqcm/n0414_working_paper_from_25january1994/ diff --git a/docs/tools/code-formatter.md b/docs/tools/code-formatter.md new file mode 100644 index 0000000..3b762df --- /dev/null +++ b/docs/tools/code-formatter.md @@ -0,0 +1,15 @@ +description: C++ のコードフォーマッタの紹介 + +# C++ コードフォーマッタ + +## ClangFormat + +公式サイト +- ClangFormat +[https://clang.llvm.org/docs/ClangFormat.html](https://clang.llvm.org/docs/ClangFormat.html) + +ダウンロードを直接行うなら LLVM のダウンロードページが便利です。 +ビルド済みバイナリが提供されています。 + +- LLVM Download Page +[http://releases.llvm.org/download.html](http://releases.llvm.org/download.html) diff --git a/docs/tools/compilers.md b/docs/tools/compilers.md new file mode 100644 index 0000000..7b331aa --- /dev/null +++ b/docs/tools/compilers.md @@ -0,0 +1,31 @@ +description: C++ コンパイラの紹介 + +# C++ コンパイラ + +## GCC +- https://gcc.gnu.org/ + +## Clang +- https://clang.llvm.org/ + +## Microsoft Visual C++ (MSVC) +[Microsoft Visual Studio](https://visualstudio.microsoft.com/) の C++ コンパイラ + +## Apple Clang +[Xcode](https://developer.apple.com/jp/xcode/) の C++ コンパイラ + +## EDG eccp +- https://www.edg.com/c + +## Intel C++ Compiler +- https://software.intel.com/en-us/c-compilers + +## IBM XL C++ +- https://www.ibm.com/us-en/marketplace/ibm-c-and-c-plus-plus-compiler-family + +## Oracle Developer Studio C++ compiler +- https://www.oracle.com/technetwork/server-storage/developerstudio/overview/index.html + +## Embarcadero C++ Builder +- https://www.embarcadero.com/products/cbuilder + diff --git a/docs/tools/gitignore.md b/docs/tools/gitignore.md new file mode 100644 index 0000000..ab18808 --- /dev/null +++ b/docs/tools/gitignore.md @@ -0,0 +1,10 @@ +description: C++ 用 .gitignore の紹介 + +# C++ 用 .gitignore + +- C++ +[https://github.com/github/gitignore/blob/main/C%2B%2B.gitignore](https://github.com/github/gitignore/blob/main/C%2B%2B.gitignore) + +- VC++ (Visual Sutdio project) +[https://github.com/github/gitignore/blob/main/VisualStudio.gitignore](https://github.com/github/gitignore/blob/main/VisualStudio.gitignore) + diff --git a/docs/tools/images/build-bench.png b/docs/tools/images/build-bench.png new file mode 100644 index 0000000..9a0420a Binary files /dev/null and b/docs/tools/images/build-bench.png differ diff --git a/docs/tools/images/quick-bench.png b/docs/tools/images/quick-bench.png new file mode 100644 index 0000000..127ef8e Binary files /dev/null and b/docs/tools/images/quick-bench.png differ diff --git a/docs/tools/linter.md b/docs/tools/linter.md new file mode 100644 index 0000000..4264254 --- /dev/null +++ b/docs/tools/linter.md @@ -0,0 +1,13 @@ +description: C++ リンターの紹介 + +# C++ リンター + +## Clang-Tidy +- https://clang.llvm.org/extra/clang-tidy/ + +## cpplint +- https://github.com/cpplint/cpplint + +## Cppcheck +- https://cppcheck.sourceforge.io/ + diff --git a/docs/tools/onlinecompilers.md b/docs/tools/onlinecompilers.md index 0a3a7ed..4ce2c92 100644 --- a/docs/tools/onlinecompilers.md +++ b/docs/tools/onlinecompilers.md @@ -1,28 +1,68 @@ description: C++ プログラムのコンパイル・実行ができる Web サイトの紹介 -# オンラインコンパイラ +# C++ オンラインコンパイラ -## 開発環境 +## 主要なオンラインコンパイラ C++ プログラムのコンパイル、実行、共有ができる Web サイトです。 | | コンパイラ | 日本語入出力 | インタラクティブ | 複数ファイル | |---------------------------------------------------------------|-----------------------------------------------------------------------------------------------|:------------:|:------------:|:------------:| -| [Wandbox](https://wandbox.org/) |
  • GCC 4.4.7 - **10.0.0\***
  • Clang 3.1 - **9.0.0\***
  • | :fa-check: | | :fa-check: | -| [Compiler Explorer](https://godbolt.org/)
    (Execution モード) |
  • GCC 4.7.3 - **10.0.0\***
  • Clang 3.3 - **9.0.0\***
  • ICC 16.0.3 - **19.0.1**
  • | :fa-check: | | | -| [GDB Online](https://www.onlinegdb.com/) |
  • GCC 7.4.0
  • | :fa-check: | :fa-check: | :fa-check: | -| [repl.it](https://repl.it/languages/cpp) |
  • Clang 7.0.0
  • | :fa-check: | :fa-check: | :fa-check: | -| [paiza.io](https://paiza.io/ja/projects/new?language=cpp) |
  • Clang 7.0.0
  • | :fa-check: | | :fa-check: | -| [Ideone](https://ideone.com/) |
  • GCC 6.3.0
  • | :fa-check: | | | -| [C++ Shell](http://cpp.sh/) |
  • GCC 4.9.2
  • | | :fa-check: | | +| [Wandbox](https://wandbox.org/) |
  • GCC 6.5.0 - 16.0
  • Clang 14.0 - 21.0
  • | :material-check: | | :material-check: | +| [Compiler Explorer](https://godbolt.org/)
    (Compiler モード) |
  • GCC 3.4.6 - 16.0
  • Clang 3.0 - 21.0
  • MSVC v19.14 - v19.latest
  • ICC 13.0.1 - 2021.10.0
  • | :material-check: | | :material-check: | +| [Compiler Explorer](https://godbolt.org/)
    (Execution モード) |
  • GCC 4.7.3 - 16.0
  • Clang 3.3 - 21.0
  • MSVC v19.20 - v19.latest
  • ICC 16.0.3 - 2021.10.0
  • | :material-check: | | :material-check: | +| [repl.it](https://repl.it/languages/cpp)
    (要アカウント登録) |
  • Clang 17.0.6
  • | :material-check: | :material-check: | :material-check: | +| [C++ Shell](http://cpp.sh/) |
  • Clang 16.0.0
  • | | :material-check: | | +| [paiza.io](https://paiza.io/ja/projects/new?language=cpp) |
  • Clang 10.0.0
  • | :material-check: | | :material-check: | +| [GDB Online](https://www.onlinegdb.com/) |
  • GCC 14.2.0
  • | :material-check: | :material-check: | :material-check: | +| [Ideone](https://ideone.com/) |
  • GCC 8.3.0
  • | :material-check: | | | + +## その他のツール + +### Compiler Explorer +[Compiler Explorer](https://godbolt.org/) は、C, C++, Rust, Swift などのソースコードをコンパイルしてアセンブリを表示するオンラインコンパイラです。複数タブを使って、GCC, Clang, MSVC, ICC などのコンパイラや、コンパイルオプションを変えたときの結果を比較できます。 + +入力例 +```c++ +int square(int num) +{ + return num * num; +} +``` + +出力 +```asm +square(int): + push rbp + mov rbp, rsp + mov DWORD PTR [rbp-4], edi + mov eax, DWORD PTR [rbp-4] + imul eax, DWORD PTR [rbp-4] + pop rbp + ret +``` + +Compiler Explorer には、Web 上のファイルを `#include "URL"` でインクルードできる独自拡張機能があります。この機能を使うと、GitHub などに公開されているシングルヘッダライブラリをプログラムの中で簡単に使えます(例: https://godbolt.org/z/OV-vGQ) + + +### Quick Bench +[Quick Bench](http://quick-bench.com/) は、[google/benchmark](https://github.com/google/benchmark) による C++ プログラムの実行時間の計測と、その結果のビジュアライズができるオンラインコンパイラです。棒グラフによる比較、アセンブリの表示、グラフ画像のダウンロード、URL による結果のシェアなどの機能があります。 + +例: http://quick-bench.com/O1QdfCc73docKGKjaYBxWG6a9AU -* 印は trunk +![](images/quick-bench.png) -## C++ Insights: ソース → ソース変換 +### Build Bench +[Build Bench](https://build-bench.com/) は、異なる C++ ソースやビルドオプションどうしのビルド時間を比較できる Web サービスです。 + +![](images/build-bench.png) + + +### C++ Insights [C++ Insights](https://cppinsights.io/) は、ラムダ式、range-based for, 構造化束縛などで何が起こっているのかを、プログラムを単純なソースコードに分解することで可視化するオンラインのツールです。 -#### 入力例 +入力例 ```c++ #include @@ -36,7 +76,7 @@ int main() } } ``` -#### 出力 +出力 ```c++ #include @@ -56,79 +96,3 @@ int main() } } ``` - -## Compiler Explorer: ソース → アセンブリ変換 - -### 概要 -[Compiler Explorer](https://godbolt.org/) は、C, C++, Rust, Swift などのソースコードをコンパイルしてアセンブリを表示するオンラインコンパイラです。複数タブを使って、GCC, Clang, MSVC, ICC などのコンパイラや、コンパイルオプションを変えたときの結果を比較できます。 - -#### 入力例 -```c++ -int square(int num) { - return num * num; -} -``` - -#### 出力 -```asm -square(int): - push rbp - mov rbp, rsp - mov DWORD PTR [rbp-4], edi - mov eax, DWORD PTR [rbp-4] - imul eax, DWORD PTR [rbp-4] - pop rbp - ret -``` - -### URL からインクルード -Compiler Explorer には、Web 上のファイルを `#include "URL"` でインクルードできる独自拡張機能があります。この機能を使うと、GitHub などに公開されているシングルヘッダライブラリをプログラムの中で簡単に使えます(例: https://godbolt.org/z/OV-vGQ) - - -## Stensal: セグメンテーション違反の原因を表示 -[Stensal](https://segfault.stensal.com/) は、C, C++ プログラムを実行して、セグメンテーション違反などメモリに関する問題が発生したときに、その箇所と原因をわかりやすく表示するオンラインコンパイラです。バッファオーバーラン、Null ポインタの参照外し、未初期化変数の利用などの問題を明らかにします。実装には Wandbox が使われています。 - -#### 入力例 -```C++ -#include - -int main() -{ - const char s[] = { 'A', 'B', 'C' }; - - std::cout << s << '\n'; -} -``` - -#### 出力例 -``` -=========== Start of #0 stensal runtime message =========== - - Runtime error: **[out-of-bounds read]** - Continuing execution can cause undefined behavior, abort! - - ```stensal-diagnostic-info -- -- Reading 4 bytes from 0x937c414 will read undefined values. -- -- The memory-space-to-be-read (start:0x937c414, size:3 bytes) is bound to 's' at -- file:/prog.cc::5, 0 -- -- 0x937c414 0x937c416 -- +------------------------------+ -- | the memory-space-to-be-read |...... -- +------------------------------+ -- ^~~~~~~~~~ -- the read starts at the memory begin. -- -- Stack trace (most recent call first) of the read. -- [1] file:/musl-1.1.10/src/string/strlen.c::91, 3 -- [2] @[unknown_id 291] -- [3] file:/prog.cc::7, 2 -- [4] [libc-start-main] -- - ``` -error code (56,213) - -============ End of #0 stensal runtime message ============ -``` diff --git a/docs/tools/package-manager.md b/docs/tools/package-manager.md index eeacd14..f039cb7 100644 --- a/docs/tools/package-manager.md +++ b/docs/tools/package-manager.md @@ -1,6 +1,6 @@ description: C++ パッケージマネージャの紹介 -# パッケージマネージャ +# C++ パッケージマネージャ ## パッケージマネージャの比較 diff --git a/docs/tools/project-template.md b/docs/tools/project-template.md new file mode 100644 index 0000000..cf263c1 --- /dev/null +++ b/docs/tools/project-template.md @@ -0,0 +1,11 @@ +description: C++ プロジェクト・テンプレートの紹介 + +# C++ プロジェクト・テンプレート + +- [ModernCppStarter](https://github.com/TheLartians/ModernCppStarter) Unlicense +- [Modern C++ Template](https://github.com/filipdutescu/modern-cpp-template) Unlicense +- [CMake C++ Project Template](https://github.com/kigster/cmake-project-template) MIT +- [cmake-init](https://github.com/cginternals/cmake-init) MIT +- [Boiler plate for C++ projects](https://github.com/bsamseth/cpp-project) Unlicense +- [How to export C++ library](https://github.com/robotology/how-to-export-cpp-library) MIT +- [cpptemplate](https://github.com/Ben1980/cpptemplate) MIT diff --git a/images/cppmap.png b/images/cppmap.png new file mode 100644 index 0000000..a6b5af0 Binary files /dev/null and b/images/cppmap.png differ diff --git a/mkdocs.yml b/mkdocs.yml index 3a50689..cf65e32 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,10 +1,10 @@ site_dir: '../cppmap.github.io' # Project information -site_name: C++ の歩き方 | CppMap -site_description: C++17, C++20, C++23, C++26 に関する情報を調査・提供します -site_author: Ryo Suzuki +site_name: C++ の歩き方 | cppmap site_url: https://cppmap.github.io/ +site_author: Ryo Suzuki +site_description: C++17, C++20, C++23, C++26 に関する情報を調査・提供します # Repository repo_name: cppmap/cppmap.docs @@ -16,32 +16,45 @@ copyright: To the extent possible under law, Ryo Suzuki has waived all copyright # Theme theme: - name: 'material' - language: 'ja' - favicon: 'assets/images/logo.png' - logo: - icon: 'donut_small' + name: material + language: ja palette: - primary: 'teal' - accent: 'teal' - feature: - tabs: true + primary: teal + accent: teal + logo: images/donut_small-white-24dp.svg + favicon: assets/images/logo.png + features: + - tabs +plugins: + - search: + lang: + - en + - ja + separator: '[\s 、。,.がのをにへとでやかもる「」『』]+' extra: - search: - language: 'en, ja' - tokenizer: '[\s 、。,.がのをにへとでやかもる「」『』]+' social: - - type: 'twitter' - link: 'https://twitter.com/Reputeless' + - icon: fontawesome/brands/twitter + link: https://twitter.com/Reputeless markdown_extensions: - admonition + - attr_list - codehilite - - fontawesome_markdown - footnotes - meta - pymdownx.inlinehilite - pymdownx.magiclink - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - toc: + permalink: true + toc_depth: 3 + slugify: !!python/object/apply:pymdownx.slugs.slugify + kwds: + case: lower + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg extra_css: - "https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css" - cppmap_styles.css @@ -50,11 +63,14 @@ extra_css: nav: - Home: index.md - C++ 規格: - - C++20 の新機能: standardization/cpp20.md - - C++23 以降に向けた提案: standardization/cppx.md + - C++ 規格書: standardization/working-drafts.md + - 提案リスト: standardization/proposals.md - 標準化会議: standardization/meetings.md - 処理系の対応状況: standardization/status.md - - C++ 規格: standardization/working-drafts.md + - C++ 標準ライブラリ: standardization/header.md + - C++20 の新機能: standardization/cpp20.md + - C++23 の新機能: standardization/cpp23.md + - C++23 以降に向けた提案: standardization/cppx.md - 記事: - コメントアウトのトリック: articles/comment-tricks.md - なぜかコンパイルできる: articles/it-compiles.md @@ -62,17 +78,30 @@ nav: - 予約語の読みと名前の由来: articles/how-to-read-keywords.md - 標準ライブラリの読みと名前の由来: articles/how-to-read-libraries.md - IEEE 754 演算のルール: articles/ieee754-arithmetic.md + - C++ 関連の略語: articles/acronyms.md + - C++ 型特性 早見表: articles/type-traits.md + - C++ アクセス指定子の効果: articles/member-access.md - 学習: - - 書籍: learn/books.md - - オンライン資料: learn/online-resources.md - - 国内の勉強会: learn/studymeetings.md - - コミュニティ: learn/communities.md + - C++ 書籍: learn/books.md + - C++ オンライン資料: learn/online-resources.md + - C++ ブログ集: learn/blogs.md + - 国内の C++ 勉強会: learn/studymeetings.md + - C++ コミュニティ: learn/communities.md + - C++ カンファレンス: learn/conferences.md - ライブラリ: - Boost: libraries/boost.md - コンテナ: libraries/containers.md - - テキストデータ: libraries/text-data.md + - テキストデータ: libraries/text-data.md + - 並行・並列: libraries/concurrency.md + - テストフレームワーク: libraries/testing.md + - 数学: libraries/math.md - ツール: - - オンラインコンパイラ: tools/onlinecompilers.md - - パッケージマネージャ: tools/package-manager.md + - C++ オンラインコンパイラ: tools/onlinecompilers.md + - C++ コンパイラ: tools/compilers.md + - C++ パッケージマネージャ: tools/package-manager.md + - C++ コードフォーマッタ: tools/code-formatter.md + - C++ リンター: tools/linter.md + - C++ プロジェクトテンプレート: tools/project-template.md + - C++ 用 .gitignore: tools/gitignore.md - 貢献: - コントリビュータ: contribution/contributors.md