Skip to content

Commit 16e6dd7

Browse files
authored
LWG Issue 4001対応(P3040R0)
1 parent aa9d684 commit 16e6dd7

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

reference/ranges/iota_view.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,13 @@ namespace std::ranges {
6161
| [`begin`](iota_view/begin.md) | 先頭を指すイテレータを取得する | C++20 |
6262
| [`end`](iota_view/end.md) | 番兵を取得する | C++20 |
6363
| [`size`](iota_view/size.md) | 有限長のとき、要素数を取得する | C++20 |
64+
| [`empty`](iota_view/empty.md) | Rangeが空かどうかを判定する | C++26 |
6465
6566
## 継承しているメンバ関数
6667
6768
| 名前 | 説明 | 対応バージョン |
6869
|----------------------------------------------|------------------------------------------|----------------|
69-
| [`empty`](view_interface/empty.md) | Rangeが空かどうかを判定する | C++20 |
70+
| [`empty`](view_interface/empty.md) | Rangeが空かどうかを判定する | C++20(C++23まで) |
7071
| [`operator bool`](view_interface/op_bool.md) | Rangeが空でないかどうかを判定する | C++20 |
7172
| [`front`](view_interface/front.md) | 先頭要素への参照を取得する | C++20 |
7273
| [`back`](view_interface/back.md) | 有限長のとき、末尾要素への参照を取得する | C++20 |
@@ -201,3 +202,5 @@ FizzBuzz
201202
- [C++20 ranges](https://techbookfest.org/product/5134506308665344)
202203
- [P2325R3 Views should not be required to be default constructible](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2325r3.html) (本提案文書はC++20に遡って適用されている)
203204
- [P2367R0 Remove misuses of list-initialization from Clause 24](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2367r0.html) (本提案文書はC++20に遡って適用されている)
205+
- [LWG Issue 4001. `iota_view` should provide `empty`](https://cplusplus.github.io/LWG/issue4001)
206+
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# empty
2+
* ranges[meta header]
3+
* std::ranges[meta namespace]
4+
* iota_view[meta class]
5+
* function[meta id-type]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
constexpr bool empty() const;
10+
```
11+
12+
## 概要
13+
14+
[`iota_view`](../iota_view.md)が空かどうかを取得する
15+
16+
## 効果
17+
18+
```cpp
19+
return value_ == bound_;
20+
```
21+
22+
空の場合に`true`を返す。
23+
24+
## 備考
25+
26+
C++20当初、この関数は[`view_interface`](/reference/ranges/view_interface.md)を通じて提供されていた。しかし、[`size()`](size.md)の制約を満たさない様な型の範囲を生成しなおかつ`input_range`となる場合、その様な範囲は空ではないことが分かるにも関わらず`view_interface::empty()`は無効化されてしまっていた。
27+
28+
この問題を回避するために、本メンバ関数が追加された。
29+
30+
##
31+
```cpp example
32+
#include <ranges>
33+
#include <vector>
34+
#include <iostream>
35+
36+
int main() {
37+
std::vector<int> v;
38+
auto it = std::back_inserter(v);
39+
40+
auto r = std::views::iota(it);
41+
std::cout << r.empty() << "\n";
42+
}
43+
```
44+
45+
### 出力
46+
```
47+
false
48+
```
49+
50+
## バージョン
51+
### 言語
52+
- C++20
53+
54+
### 処理系
55+
- [Clang](/implementation.md#clang): ?
56+
- [GCC](/implementation.md#gcc): ?
57+
- [ICC](/implementation.md#icc): ?
58+
- [Visual C++](/implementation.md#visual_cpp): ?
59+
60+
## 参照
61+
62+
- [LWG Issue 4001. `iota_view` should provide `empty`](https://cplusplus.github.io/LWG/issue4001)

0 commit comments

Comments
 (0)