最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<chrono>

# std::chrono::weekday::ok(C++20)

    constexpr bool ok() const noexcept; // (1) C++20

## 概要

`weekday`オブジェクトが保持する曜日の値が`[0, 6]`の範囲内かを判定する。

## 戻り値

コンストラクタで設定されて保持している曜日を表す値`wd`があるとして、以下を返す：

    return wd <= 6;

## 備考

- この関数は、値の妥当性を検証するのではなく、カレンダー範囲の値をもっているかの判定をする

## 例

    #include <cassert>
    #include <chrono>

    namespace chrono = std::chrono;

    int main()
    {
      chrono::weekday w{0};
      assert(w.ok());

      assert(chrono::weekday{6}.ok());
      assert(chrono::weekday{7}.ok());  // 7はコンストラクタで0に置き換えられる
      assert(!chrono::weekday{8}.ok());
    }

### 出力

## バージョン

### 言語

- C++20

### 処理系

- Clang: 8.0 (値7は0にならない) ✅, 10.0 ✅
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌

## 参照

- P1466R3 Miscellaneous minor fixes for chrono
  - C++20で新規追加されるこの機能の策定中では、当初は日曜日ではじまり土曜日までの範囲をサポートしていた (`tm_wday`仕様の曜日範囲`[0, 6]`)。C++20の仕様が固まった段階では、ISO 8601で規定される、月曜日ではじまり日曜日までの曜日範囲 (`[1, 7]`) もサポートすることになり、値範囲`[1, 7]`を値範囲`[0, 6]`に変換する仕様が追加された