site
site copied to clipboard
[C++23] tuple, pair, tuple-likeオブジェクトの互換性
- P2165R4 Compatibility between tuple, pair and tuple-like objects
こちらも #1063 と同時に進行させないと面倒なことになることに気づいたので引き受けます。
pair-like
についての相談です。
pair-like
は、C++20時点においては[range.subrange]
で定義されていたのですが、現行のドラフトではtuple-like
の追加に伴い、定義が変更された上で[tuple.syn]
へと定義が移動されました。そのため、次の問題が生じました。
-
<exposition-only>
の表の記載について、C++20 としては<ranges>
記載になるが、C++23 としては<tuple>
記載にする必要がある - 同様のことから、C++20 としては
pair-like.md
を/reference/ranges
に置きたいが、C++23 としては/reference/tuple
に置きたい
そこで相談なのですが、<exposition-only>
の表への記載と、pair-like
独自ページのファイルシステム上での配置はどうすればいいでしょうか。よろしくお願いします。
説明専用コンセプトは、互換性を気にせず書く場所を決めちゃってよいかと思います。
C++20でも<tuple>
にpair-like
とtuple-like
を書いてしまってよいと思いますが、その場合はなにか懸念があるでしょうか?
互換性を気にせず書く場所を決めちゃってよい
了解しました。最新の状態に合わせ、表での位置とファイルの場所は変えていく形で作業しようと思います。
その場合はなにか懸念があるでしょうか?
C++20 時点での規格書と合わなくなることと、内容が変わらずに名称だけ変更されている事例が別にあったので、C++20 の規格書を読むときのリファレンスとしては若干使いにくくなる程度です。ただ、サイト内検索や Google 検索で補えるはずなので、問題は無いと思いますので、先述の通り作業したいと思います。
再び質問です。
tuple-like
なオブジェクト同士のbasic_common_reference
やoperator<=>
などのユーティリティはどのようなファイル配置とページ記載にすれば良いでしょうか。特定のクラスに紐づくものではないので、どうすればいいか迷っています。
(一応ですが、思いついたものとしては、/reference/tuple/tuple-like/
以下にファイルを用意して、<tuple>
のページで「tuple-like
なオブジェクトのユーティリティ」などと見出しを用意してリンクを貼る、というのがあります。)
(一応ですが、思いついたものとしては、
/reference/tuple/tuple-like/
以下にファイルを用意して、<tuple>
のページで「tuple-like
なオブジェクトのユーティリティ」などと見出しを用意してリンクを貼る、というのがあります。)
それで大丈夫です!
オーバーロードと特殊化は、関連するそのクラスの階層以下に置く、というルールにしてあります。例として、std::chrono::duration
クラスがcommon_type
を特殊化していて、duration
クラス階層以下にcommon_type
の特殊化ページを作っています。
https://cpprefjp.github.io/reference/chrono/duration.html
tuple-like
はコンセプトではありますが、コンセプトでの特殊化やオーバーロードも対象にしてよいと思います。
よかった...ありがとうございます! その辺りのルールあるいは書き方というのも纏まっているとありがたいですね...
ディレクトリ構造のドキュメントを作っておきます!