- format[meta header]
- std[meta namespace]
- variable[meta id-type]
- cpp23[meta cpp]
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
}- unspecified[italic]
- range_format[link range_format.md]
- ranges::input_range[link /reference/ranges/input_range.md]
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をもつ
- ユーザーは、この型の特殊化を定義できる
- ただし、その特殊化は定数式であり、型として
constrange_formatをもつこと
- ただし、その特殊化は定数式であり、型として
- C++23
- Clang: ??
- GCC: ??
- Visual C++: ??