Skip to content

Commit eba553f

Browse files
committed
add preconditions to member functions of std::future / remove UB from example
1 parent f1ae4bc commit eba553f

File tree

4 files changed

+22
-10
lines changed

4 files changed

+22
-10
lines changed

reference/future/future/get.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ void future<void>::get();
2929
共有状態に例外が格納されていた場合、格納されている例外を送出する。
3030

3131

32+
## 事前条件
33+
- [`valid()`](valid.md) `== true`
34+
- この条件を満たさなかった場合、処理系によっては[`future_error`](../future_error.md)例外を投げることがある。
35+
36+
3237
## 事後条件
3338
この関数呼び出し後は共有状態が破棄され、[`valid()`](valid.md) `== false`となること。
3439

reference/future/future/wait.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ void wait() const;
2121
なし
2222

2323

24+
## 事前条件
25+
- [`valid()`](valid.md) `== true`
26+
- この条件を満たさなかった場合、処理系によっては[`future_error`](../future_error.md)例外を投げることがある。
27+
28+
2429
##
2530
```cpp example
2631
#include <iostream>

reference/future/future/wait_for.md

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ future_status wait_for(const chrono::duration<Rep, Period>& rel_time) const;
2929
- C++14 : 時計クラス、[`time_point`](/reference/chrono/time_point.md)クラス、[`duration`](/reference/chrono/duration.md)クラスの構築が例外を送出する場合、この関数はそれらの例外を送出する。
3030
3131
32+
## 事前条件
33+
- [`valid()`](valid.md) `== true`
34+
- この条件を満たさなかった場合、処理系によっては[`future_error`](../future_error.md)例外を投げることがある。
35+
36+
3237
## 例
3338
### 例1
3439
```cpp example
@@ -100,14 +105,8 @@ int main()
100105

101106
f.get(); // 一度値を取り出すと共有状態が破棄される
102107

103-
// 共有状態を持たない(valid() == falseな)futureでwaitをするとstd::future_error例外
104-
// ただし、libc++では(少なくとも19.1.0までは)SEGVするので注意
105-
try {
106-
ready();
107-
}
108-
catch(const std::future_error& e) {
109-
std::cout << e.what() << std::endl;
110-
}
108+
// 共有状態を持たない(valid() == falseな)futureでwaitをするとUB
109+
// ready();
111110
}
112111
```
113112
* wait_for[color ff0000]
@@ -116,13 +115,11 @@ int main()
116115
* std::future_status[link /reference/future/future_status.md]
117116
* f.get()[link /reference/future/shared_future/get.md]
118117
* valid()[link /reference/future/future/valid.md]
119-
* std::future_error[link /reference/future/future_error.md]
120118

121119
#### 出力例
122120
```
123121
false
124122
true
125-
std::future_error: No associated state
126123
```
127124

128125
## バージョン

reference/future/future/wait_until.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ future_status wait_until(const chrono::time_point<Clock, Duration>& abs_time) co
3434
- C++14 : 時計クラス、[`time_point`](/reference/chrono/time_point.md)クラス、[`duration`](/reference/chrono/duration.md)クラスの構築が例外を送出する場合、この関数はそれらの例外を送出する。
3535
3636
37+
## 事前条件
38+
- [`valid()`](valid.md) `== true`
39+
- この条件を満たさなかった場合、処理系によっては[`future_error`](../future_error.md)例外を投げることがある。
40+
41+
3742
## 例
3843
```cpp example
3944
#include <iostream>

0 commit comments

Comments
 (0)