最終更新日時: 2024年08月02日 14時07分35秒 (JST)
Akira Takahashi が更新

履歴 編集

class
<chrono>

# std::chrono::weekday_indexed(C++20)

    namespace std::chrono {
      class weekday_indexed;
    }

## 概要

`weekday_indexed`は、月内でのN回目の指定した曜日を表すクラスである。

Nの妥当な範囲は`[1, 5]`である。0ベースではないことに注意。

このクラスは等値比較ができ、EqualityComparableの要件を満たす。しかし大小比較はできず、LessThanComparable要件は満たさない。

このクラスは、トリビアルコピー可能で、かつスタンダードレイアウト型である。

## メンバ関数

### 構築／コピー／破棄

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ | C++20
`weekday_indexed& operator=(const weekday_indexed&) = default;` `weekday_indexed& operator=(weekday_indexed&&) = default;` | 代入演算子 | C++20

### 観測

名前 | 説明 | 対応バージョン
--- | --- | ---
`weekday` | 曜日を取得する | C++20
`index` | インデックスを取得する | C++20
`ok` | 値が範囲に収まっているか判定する | C++20

## 非メンバ関数

### 比較演算

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator==` | 等値比較を行う | C++20
`bool operator!=(const weekday_indexed&, const weekday_indexed&) noexcept;` | 非等値比較を行う (`==`により使用可能) | C++20

### 入出力

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator<<` | 出力ストリームに出力する | C++20

## 文字列フォーマットサポート

名前 | 説明 | 対応バージョン
--- | --- | ---
`formatter` | `std::formatter`クラスの特殊化 | C++20

## ハッシュサポート

名前 | 説明 | 対応バージョン
--- | --- | ---
`template <class T> struct hash;` | `hash`クラスの先行宣言 | C++26
`template<> struct hash<chrono::weekday_indexed>;` | `hash`クラスの`weekday_indexed`に対する特殊化 | C++26

## 例

    #include <cassert>
    #include <iostream>
    #include <chrono>

    namespace chrono = std::chrono;
    using namespace std::chrono_literals;

    int main() {
      // 未規定の年月の、最初の日曜日
      auto wi1 = chrono::Sunday[1];
      chrono::weekday_indexed wi2{chrono::Sunday, 1};
      assert(wi1.weekday() == chrono::Sunday);
      assert(wi1.index() == 1);
      assert(wi1 == wi2);

      // 2020年4月の最初の日曜日を取得する
      chrono::year_month_weekday ymw = 2020y/4/chrono::Sunday[1];
      chrono::sys_days sd{ymw};
      chrono::year_month_day date{sd};
      std::cout << date << std::endl;
    }

### 出力

    2020-04-05

## バージョン

### 言語

- C++20

### 処理系

- Clang: 8.0 (入出力ストリームなし) ✅
- GCC: 10.1 ❌
- Visual C++: 2019 Update 3 ❌

## 参照

- P2592R3 Hashing support for `std::chrono` value classes
  - C++26でハッシュサポートが追加された