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++: ??