namespace std {
template <class R>
constexpr unspecified format_kind = unspecified; // (1) C++23
template <ranges::input_range R>
requires same_as<R, remove_cvref_t<R>>
constexpr range_format format_kind<R> = see below; // (2) C++23
}
概要
Rangeの書式種別を取得する変数テンプレート。
- (1) プライマリテンプレート。これがインスタンス化されたらプログラムは不適格となる
- (2) 入力Rangeの型
Rに応じて、書式種別を取得する
テンプレートパラメータ制約
- (2) : 入力Rangeの型
Rは、const/volatileおよび参照で修飾されていないこと
効果
以下、(2)について記載する。
same_as<remove_cvref_t<ranges::range_reference_t<R>>, R>がtrueである場合、値range_format::disabledをもつ- 例として、
std::filesystem::pathのような再帰的な型がこれに相当する
- 例として、
R::key_typeが有効な式である場合 (std::mapやstd::setが相当する)、R::mapped_typeが有効な式であり、remove_cvref_t<ranges::range_reference_t<R>>をUとして、Uがstd::pairの特殊化もしくはUがstd::tupleの特殊化で要素数が2の場合、値range_format::mapをもつ- そうでない場合、値
range_format::setをもつ
- そうでない場合、値
range_format::sequenceをもつ
備考
- ユーザーは、この型の特殊化を定義できる
- ただし、その特殊化は定数式であり、型として
const range_formatをもつこと
- ただし、その特殊化は定数式であり、型として
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: ??
- Visual C++: ??