Skip to content

Commit

Permalink
add preconditions to member functions of std::future / remove UB from…
Browse files Browse the repository at this point in the history
… example
  • Loading branch information
wx257osn2 committed Jan 4, 2025
1 parent f1ae4bc commit eba553f
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 10 deletions.
5 changes: 5 additions & 0 deletions reference/future/future/get.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ void future<void>::get();
共有状態に例外が格納されていた場合、格納されている例外を送出する。


## 事前条件
- [`valid()`](valid.md) `== true`
- この条件を満たさなかった場合、処理系によっては[`future_error`](../future_error.md)例外を投げることがある。


## 事後条件
この関数呼び出し後は共有状態が破棄され、[`valid()`](valid.md) `== false`となること。

Expand Down
5 changes: 5 additions & 0 deletions reference/future/future/wait.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ void wait() const;
なし


## 事前条件
- [`valid()`](valid.md) `== true`
- この条件を満たさなかった場合、処理系によっては[`future_error`](../future_error.md)例外を投げることがある。


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

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

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

#### 出力例
```
false
true
std::future_error: No associated state
```

## バージョン
Expand Down
5 changes: 5 additions & 0 deletions reference/future/future/wait_until.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ future_status wait_until(const chrono::time_point<Clock, Duration>& abs_time) co
- C++14 : 時計クラス、[`time_point`](/reference/chrono/time_point.md)クラス、[`duration`](/reference/chrono/duration.md)クラスの構築が例外を送出する場合、この関数はそれらの例外を送出する。
## 事前条件
- [`valid()`](valid.md) `== true`
- この条件を満たさなかった場合、処理系によっては[`future_error`](../future_error.md)例外を投げることがある。
## 例
```cpp example
#include <iostream>
Expand Down

0 comments on commit eba553f

Please sign in to comment.