最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

# ディレクトリ構造

## lang

- cpp{version}.mdの形式で、各C++バージョンの言語機能ページを作る
- future.mdは、将来のC++で検討されている言語機能を記載するところである。導入予定だった機能が再検討になった場合などに使用する
- archive.mdは、廃案になったC++機能だが解説として残す価値のあるものがある場合に、記載するところである

## reference / module

- reference階層は、ヘッダベースのライブラリリファレンスで、その階層直下にはヘッダページを置く
- module階層は、モジュールベースのライブラリリファレンスで、その階層直下にはモジュールページを置く

reference階層とmodule階層は上記以外は同じであるため、以下、共通のルールを書きます。

### ヘッダ・モジュール階層

- ヘッダ・モジュール階層以下に、それに所属している機能のページを置く
- どのヘッダ・モジュールにも属さない機能の場合は、以下のように対応する
  - 全体で使用する説明専用の機能は、仮のヘッダ`<exposition-only>`に属するものとして記載する

### クラス階層

- クラスに属するメンバ関数と型は、クラス階層の下に置く
- オーバーロードを意図している関数、そのクラス向けに特殊化した機能も、クラス階層の下に置き、機能の列挙としてもクラスページで行う
  - オーバーロードを意図している関数の例は以下：
    - 非メンバ関数の演算子
    - `std::get()`
    - `std::begin()`/`std::end()`/`std::data()`/`std::size()`およびそれに類するもの
    - `std::swap()`
    - `std::erase()`/`std::erase_if()`
    - `floor()`/`ceil()`/`round()` (chrono)
  - 特殊な例として、`std::expected`では部分特殊化のためにクラス階層を分離している。これは各メンバ説明の差分が大きいためである
- 演算子オーバーロードは、`operator<<` (出力ストリームへの出力) と `std::operator>>` (入力ストリームからの入力) を除き、左辺のクラスに属するものとする
  - 特殊な例として、`std::error_code`と`std::error_condition`の比較演算子は、クラス階層ではなくヘッダ階層としている。これは所属関係がむずかしいためである

### コンセプト階層

- コンセプトによってオーバーロード・特殊化されている場合は、コンセプトの階層を作って、その下に置く。機能の列挙としてはヘッダページで行う

### 名前空間階層

- 名前空間の階層は基本的に導入しない。例外は以下：
  - `std::this_thread`
    - 名前空間に特殊な意味をもたせている