Skip to content

Commit

Permalink
<format> : range_formatとformat_kindを追加 #1085
Browse files Browse the repository at this point in the history
  • Loading branch information
faithandbrave committed Jan 19, 2023
1 parent 333f723 commit dc3a27e
Show file tree
Hide file tree
Showing 42 changed files with 128 additions and 49 deletions.
2 changes: 2 additions & 0 deletions GLOBAL_QUALIFY_LIST.txt
Expand Up @@ -71,6 +71,7 @@
* <codecvt>[link /reference/codecvt.md]
* <complex>[link /reference/complex.md]
* <concepts>[link /reference/concepts.md]
* same_as[link /reference/concepts/same_as.md]
* <condition_variable>[link /reference/condition_variable.md]
* std::condition_variable[link /reference/condition_variable/condition_variable.md]
* <cstddef>[link /reference/cstddef.md]
Expand Down Expand Up @@ -188,6 +189,7 @@
* <tuple>[link /reference/tuple.md]
* std::tuple[link /reference/tuple/tuple.md]
* <type_traits>[link /reference/type_traits.md]
* remove_cvref_t[link /reference/type_traits/remove_cvref.md]
* std::false_type[link /reference/type_traits/false_type.md]
* std::is_same[link /reference/type_traits/is_same.md]
* std::is_same_v[link /reference/type_traits/is_same.md]
Expand Down
1 change: 0 additions & 1 deletion reference/algorithm/ranges_unique_copy.md
Expand Up @@ -46,7 +46,6 @@ namespace std::ranges {
* indirect_equivalence_relation[link /reference/iterator/indirect_equivalence_relation.md]
* indirectly_copyable[link /reference/iterator/indirectly_copyable.md]
* forward_iterator[link /reference/iterator/forward_iterator.md]
* same_as[link /reference/concepts/same_as.md]
* iter_value_t[link /reference/iterator/iter_value_t.md]
* indirectly_copyable_storable[link /reference/iterator/indirectly_copyable_storable.md]
* projected[link /reference/iterator/projected.md]
Expand Down
1 change: 0 additions & 1 deletion reference/chrono/zoned_time/op_deduction_guide.md
Expand Up @@ -53,7 +53,6 @@ namespace std::chrono {
* conditional_t[link /reference/type_traits/conditional.md]
* is_convertible[link /reference/type_traits/is_convertible.md]
* time_zone[link /reference/chrono/time_zone.md]
* remove_cvref_t[link /reference/type_traits/remove_cvref.md]
## 概要
`std::chrono::zoned_time`クラステンプレートの型推論補助。
Expand Down
1 change: 0 additions & 1 deletion reference/concepts/assignable_from.md
Expand Up @@ -18,7 +18,6 @@ namespace std {
* is_lvalue_reference_v[link /reference/type_traits/is_lvalue_reference.md]
* remove_reference_t[link /reference/type_traits/remove_reference.md]
* common_reference_with[link common_reference_with.md]
* same_as[link same_as.md]
## 概要
Expand Down
2 changes: 0 additions & 2 deletions reference/concepts/boolean-testable.md
Expand Up @@ -84,9 +84,7 @@ namespace std {
}
```
* movable[link /reference/concepts/movable.md]
* same_as[link /reference/concepts/same_as.md]
* convertible_to[link /reference/concepts/convertible_to.md]
* remove_cvref_t[link /reference/type_traits/remove_cvref.md]
* remove_reference_t[link /reference/type_traits/remove_reference.md]


Expand Down
1 change: 0 additions & 1 deletion reference/concepts/common_reference_with.md
Expand Up @@ -13,7 +13,6 @@ namespace std {
convertible_to<U, common_reference_t<T, U>>;
}
```
* same_as[link /reference/concepts/same_as.md]
* convertible_to[link /reference/concepts/convertible_to.md]
* common_reference_t[link /reference/type_traits/common_reference.md]
Expand Down
1 change: 0 additions & 1 deletion reference/concepts/common_with.md
Expand Up @@ -23,7 +23,6 @@ namespace std {
add_lvalue_reference_t<const U>>>;
}
```
* same_as[link /reference/concepts/same_as.md]
* common_type_t[link /reference/type_traits/common_type.md]
* add_lvalue_reference_t[link /reference/type_traits/add_lvalue_reference.md]
* common_reference_with[link /reference/concepts/common_reference_with.md]
Expand Down
4 changes: 4 additions & 0 deletions reference/format.md
Expand Up @@ -32,6 +32,10 @@
| [`basic_format_context`](format/basic_format_context.md) | 引数のフォーマットのコンテキスト (class template) | C++20 |
| [`format_context`](format/basic_format_context.md) | `basic_format_context`のマルチバイト文字列版 (type-alias) | C++20 |
| [`wformat_context`](format/basic_format_context.md) | `basic_format_context`のワイド文字列版 (type-alias) | C++20 |
| [`range_format`](format/range_format.md) | Rangeの書式種別 (enum) | C++23 |
| [`format_kind`](format/format_kind.md) | 指定したRangeの書式種別を取得する (variable) | C++23 |
| [`range_formatter`](format/range_formatter.md.nolink) | Rangeに対する書式文字列の解析、値のフォーマットを行う (class template) | C++23 |
| [`range-default-formatter`](format/range-default-formatter.md.nolink) | Rangeに対する共通の書式文字列の解析、値のフォーマットを行う説明専用クラス (class template) | C++23 |

## 引数

Expand Down
64 changes: 64 additions & 0 deletions reference/format/format_kind.md
@@ -0,0 +1,64 @@
# format_kind
* format[meta header]
* std[meta namespace]
* variable[meta id-type]
* cpp23[meta cpp]

```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
}
```
* 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`](/reference/concepts/same_as.md)`<`[`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<`[`ranges::range_reference_t`](/reference/ranges/range_reference_t.md)`<R>>, R>`が`true`である場合、値[`range_format::disabled`](range_format.md)をもつ
- 例として、[`std::filesystem::path`](/reference/filesystem/path.md)のような再帰的な型がこれに相当する
- `R::key_type`が有効な式である場合 ([`std::map`](/reference/map/map.md)や[`std::set`](/reference/set/set.md)が相当する)、
- `R::mapped_type`が有効な式であり、[`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<`[`ranges::range_reference_t`](/reference/ranges/range_reference_t.md)`<R>>`を`U`として、`U`が[`std::pair`](/reference/utility/pair.md)の特殊化もしくは`U`が[`std::tuple`](/reference/tuple/tuple.md)の特殊化で要素数が2の場合、値[`range_format::map`](range_format.md)をもつ
- そうでない場合、値[`range_format::set`](range_format.md)をもつ
- そうでない場合、値[`range_format::sequence`](range_format.md)をもつ
## 備考
- ユーザーは、この型の特殊化を定義できる
- ただし、その特殊化は定数式であり、型として`const` [`range_format`](range_format.md)をもつこと
## バージョン
### 言語
- C++23
### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): ??
- [Visual C++](/implementation.md#visual_cpp): ??
## 関連項目
- [`format_kind`](range_format.md)
- [`formatter`](formatter.md)
## 参照
- [P2286R8 Formatting Ranges](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2286r8.html)
- [P2585R1 Improve default container formatting](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2585r1.html)
2 changes: 0 additions & 2 deletions reference/format/formattable.md
Expand Up @@ -25,10 +25,8 @@ namespace std {
```
* formatter[link formatter.md]
* semiregular[link /reference/concepts/semiregular.md]
* remove_cvref_t[link /reference/type_traits/remove_cvref.md]
* basic_format_context[link basic_format_context.md]
* basic_format_parse_context[link basic_format_parse_context.md]
* same_as[link /reference/concepts/same_as.md]
## 概要
`formattable`は、文字列フォーマット可能であることを表すコンセプトである。
Expand Down
55 changes: 55 additions & 0 deletions reference/format/range_format.md
@@ -0,0 +1,55 @@
# range_format
* format[meta header]
* std[meta namespace]
* enum[meta id-type]
* cpp23[meta cpp]

```cpp
namespace std {
enum class range_format {
disabled,
map,
set,
sequence,
string,
debug_string
};
}
```
## 概要
Rangeの書式種別を表す列挙型。
| 列挙値 | 説明 |
|----------------|------|
| `disabled` | 書式化ができないRangeであることを表す値 |
| `map` | [`std::map`](/reference/map/map.md)や[`std::flat_map`](/reference/flat_map/flat_map.md.nolink)向けの書式。`{k1: v1, k2: v2}` |
| `set` | [`std::set`](/reference/set/set.md)や[`std::flat_set`](/reference/flat_set/flat_set.md.nolink)向けの書式。`{v1, v2}` |
| `sequence` | [`std::vector`](/reference/vector/vector.md)や[`std::array`](/reference/array/array.md)向けの書式。`[v1, v2]`|
| `string` | 文字列向けの書式。`abc` |
| `debug_string` | デバッグ文字列向けの書式。`\nabc` |
## 備考
- `disable`は値0であるため、`bool`型に変換して有効かどうかを判定するための使用できる
## バージョン
### 言語
- C++23
### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): ??
- [Visual C++](/implementation.md#visual_cpp): ??
## 関連項目
- [`format_kind`](format_kind.md)
- [`formatter`](formatter.md)
## 参照
- [P2286R8 Formatting Ranges](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2286r8.html)
- [P2585R1 Improve default container formatting](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2585r1.html)
1 change: 0 additions & 1 deletion reference/generator/generator/promise_type/op_new.md
Expand Up @@ -17,7 +17,6 @@ template<class This, class Alloc, class... Args>
requires same_as<Allocator, void> || convertible_to<const Alloc&, Allocator>
void* operator new(size_t size, const This&, allocator_arg_t, const Alloc& alloc, const Args&...);
```
* same_as[link /reference/concepts/same_as.md]
* default_initializable[link /reference/concepts/default_initializable.md]
* convertible_to[link /reference/concepts/convertible_to.md]
* allocator_arg_t[link /reference/memory/allocator_arg_t.md]
Expand Down
2 changes: 0 additions & 2 deletions reference/generator/generator/promise_type/yield_value.md
Expand Up @@ -28,9 +28,7 @@ auto yield_value(ranges::elements_of<Rng, Alloc> r) noexcept; // (4)
* ranges::range_reference_t[link /reference/ranges/range_reference_t.md]
* remove_reference_t[link /reference/type_traits/remove_reference.md]
* is_rvalue_reference_v[link /reference/type_traits/is_rvalue_reference.md]
* remove_cvref_t[link /reference/type_traits/remove_cvref.md]
* constructible_from[link /reference/concepts/constructible_from.md]
* same_as[link /reference/concepts/same_as.md]
* convertible_to[link /reference/concepts/convertible_to.md]
Expand Down
1 change: 0 additions & 1 deletion reference/iterator/bidirectional_iterator.md
Expand Up @@ -20,7 +20,6 @@ namespace std {
* derived_from[link /reference/concepts/derived_from.md]
* ITER_CONCEPT[link /reference/iterator/input_iterator.md#iter_concept]
* bidirectional_iterator_tag[link iterator_tag.md]
* same_as[link /reference/concepts/same_as.md]
## 概要
Expand Down
1 change: 0 additions & 1 deletion reference/iterator/common_iterator.md
Expand Up @@ -35,7 +35,6 @@ namespace std {
```
* input_or_output_iterator[link /reference/iterator/input_or_output_iterator.md]
* sentinel_for[link /reference/iterator/sentinel_for.md]
* same_as[link /reference/concepts/same_as.md]
* copyable[link /reference/concepts/copyable.md]
* variant[link /reference/variant/variant.md]
* incrementable_traits[link /reference/iterator/incrementable_traits.md]
Expand Down
2 changes: 0 additions & 2 deletions reference/iterator/contiguous_iterator.md
Expand Up @@ -23,9 +23,7 @@ namespace std {
* contiguous_iterator_tag[link /reference/iterator/iterator_tag.md]
* is_lvalue_reference_v[link /reference/type_traits/is_lvalue_reference.md]
* iter_reference_t[link /reference/iterator/iter_reference_t.md]
* same_as[link /reference/concepts/same_as.md]
* iter_value_t[link /reference/iterator/iter_value_t.md]
* remove_cvref_t[link /reference/type_traits/remove_cvref.md]
* to_address[link /reference/memory/to_address.md]
* add_pointer_t[link /reference/type_traits/add_pointer.md]
Expand Down
1 change: 0 additions & 1 deletion reference/iterator/incrementable.md
Expand Up @@ -17,7 +17,6 @@ namespace std {
```
* regular[link /reference/concepts/regular.md]
* weakly_incrementable[link /reference/iterator/weakly_incrementable.md]
* same_as[link /reference/concepts/same_as.md]
## 概要
Expand Down
1 change: 0 additions & 1 deletion reference/iterator/incrementable_traits.md
Expand Up @@ -111,7 +111,6 @@ int main() {
}
```
* std::incrementable_traits[color ff0000]
* same_as[link /reference/concepts/same_as.md]

### 出力
```
Expand Down
3 changes: 1 addition & 2 deletions reference/iterator/indirect_result_t.md
Expand Up @@ -41,7 +41,6 @@ int main() {
}
```
* std::indirect_result_t[color ff0000]
* same_as[link /reference/concepts/same_as.md]

### 出力
```
Expand All @@ -58,4 +57,4 @@ int main() {

## 参照

- [P0896R4 The One Ranges Proposal (was Merging the Ranges TS)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0896r4.pdf)
- [P0896R4 The One Ranges Proposal (was Merging the Ranges TS)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0896r4.pdf)
1 change: 0 additions & 1 deletion reference/iterator/indirectly_readable_traits.md
Expand Up @@ -129,7 +129,6 @@ int main() {
}
```
* std::indirectly_readable_traits[color ff0000]
* same_as[link /reference/concepts/same_as.md]

### 出力
```
Expand Down
1 change: 0 additions & 1 deletion reference/iterator/indirectly_writable.md
Expand Up @@ -41,7 +41,6 @@ namespace std {
indirectly_readable<Out> && same_as<iter_value_t<Out>, decay_t<T>>
```
* indirectly_readable[link indirectly_readable.md]
* same_as[link /reference/concepts/same_as.md]
* iter_value_t[link /reference/iterator/iter_value_t.md]
* decay_t[link /reference/type_traits/decay.md]

Expand Down
3 changes: 1 addition & 2 deletions reference/iterator/iter_difference_t.md
Expand Up @@ -10,7 +10,6 @@ namespace std {
using iter_difference_t = /*see below*/;
}
```
* remove_cvref_t[link /reference/type_traits/remove_cvref.md]
## 概要
Expand Down Expand Up @@ -63,4 +62,4 @@ int main() {

## 参照

- [P0896R4 The One Ranges Proposal (was Merging the Ranges TS)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0896r4.pdf)
- [P0896R4 The One Ranges Proposal (was Merging the Ranges TS)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0896r4.pdf)
4 changes: 1 addition & 3 deletions reference/iterator/projected.md
Expand Up @@ -24,7 +24,6 @@ namespace std {
```
* indirectly_readable[link /reference/iterator/indirectly_readable.md]
* indirectly_regular_unary_invocable[link /reference/iterator/indirectly_unary_invocable.md]
* remove_cvref_t[link /reference/type_traits/remove_cvref.md]
* indirect_result_t[link /reference/iterator/indirect_result_t.md]
* incrementable_traits[link /reference/iterator/incrementable_traits.md]
* iter_difference_t[link /reference/iterator/iter_difference_t.md]
Expand Down Expand Up @@ -66,7 +65,6 @@ int main() {
```
* std::projected[color ff0000]
* identity[link /reference/functional/identity.md]
* same_as[link /reference/concepts/same_as.md]
* indirectly_readable[link /reference/iterator/indirectly_readable.md]
* iter_difference_t[link /reference/iterator/iter_difference_t.md]
* iter_value_t[link /reference/iterator/iter_value_t.md]
Expand Down Expand Up @@ -95,4 +93,4 @@ int main() {

## 参照

- [P0896R4 The One Ranges Proposal (was Merging the Ranges TS)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0896r4.pdf)
- [P0896R4 The One Ranges Proposal (was Merging the Ranges TS)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0896r4.pdf)
1 change: 0 additions & 1 deletion reference/iterator/random_access_iterator.md
Expand Up @@ -30,7 +30,6 @@ namespace std {
* sized_sentinel_for[link /reference/iterator/sized_sentinel_for.md]
* iter_difference_t[link /reference/iterator/iter_difference_t.md]
* iter_reference_t[link /reference/iterator/iter_reference_t.md]
* same_as[link /reference/concepts/same_as.md]
## 概要
Expand Down
1 change: 0 additions & 1 deletion reference/iterator/sized_sentinel_for.md
Expand Up @@ -19,7 +19,6 @@ namespace std {
* sentinel_for[link /reference/iterator/sentinel_for.md]
* disable_sized_sentinel_for[link disable_sized_sentinel_for.md]
* remove_cv_t[link /reference/type_traits/remove_cv.md]
* same_as[link /reference/concepts/same_as.md]
* iter_difference_t[link /reference/iterator/iter_difference_t.md]
## 概要
Expand Down
1 change: 0 additions & 1 deletion reference/iterator/weakly_incrementable.md
Expand Up @@ -20,7 +20,6 @@ namespace std {
* movable[link /reference/concepts/movable.md]
* iter_difference_t[link /reference/iterator/iter_difference_t.md]
* is-signed-integer-like[link /reference/iterator/is_integer_like.md]
* same_as[link /reference/concepts/same_as.md]
## 概要
Expand Down
2 changes: 0 additions & 2 deletions reference/memory/no-throw-input-iterator.md
Expand Up @@ -17,8 +17,6 @@ namespace std {
* is_lvalue_reference_v[link /reference/type_traits/is_lvalue_reference.md]
* iter_reference_t[link /reference/iterator/iter_reference_t.md]
* iter_value_t[link /reference/iterator/iter_value_t.md]
* same_as[link /reference/concepts/same_as.md]
* remove_cvref_t[link /reference/type_traits/remove_cvref.md]
## 概要
Expand Down
1 change: 0 additions & 1 deletion reference/random/uniform_random_bit_generator.md
Expand Up @@ -18,7 +18,6 @@ namespace std {
```
* invocable[link /reference/concepts/invocable.md]
* unsigned_integral[link /reference/concepts/unsigned_integral.md]
* same_as[link /reference/concepts/same_as.md]
* invoke_result_t[link /reference/type_traits/invoke_result.md]
* bool_constant[link /reference/type_traits/bool_constant.md]
Expand Down
1 change: 0 additions & 1 deletion reference/ranges/borrowed_iterator_t.md
Expand Up @@ -64,7 +64,6 @@ int main() {
* ranges::dangling[link dangling.md]
* ranges::subrange[link subrange.md]
* borrowed_range[link borrowed_range.md]
* same_as[link /reference/concepts/same_as.md]

### 出力
```
Expand Down
1 change: 0 additions & 1 deletion reference/ranges/borrowed_range.md
Expand Up @@ -13,7 +13,6 @@ namespace std::ranges {
* range[link range.md]
* is_lvalue_reference_v[link /reference/type_traits/is_lvalue_reference.md]
* enable_borrowed_range[link enable_borrowed_range.md]
* remove_cvref_t[link /reference/type_traits/remove_cvref.md]
## 概要
`borrowed_range`は、Rangeを所有しない`range`を表すコンセプトである。Rangeオブジェクトの左辺値参照は`borrowed_range`である。
Expand Down

0 comments on commit dc3a27e

Please sign in to comment.