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

履歴 編集

function
<chrono>

# std::chrono::operator/(C++20)

    namespace std::chrono {
      constexpr month_day
        operator/(const month& m, const day& d) noexcept;               // (1) C++20
      constexpr month_day
        operator/(const month& m, int d) noexcept;                      // (2) C++20
      constexpr month_day
        operator/(int m, const day& d) noexcept;                        // (3) C++20

      constexpr month_day_last
        operator/(const month& m, last_spec) noexcept;                  // (4) C++20
      constexpr month_day_last
        operator/(int m, last_spec) noexcept;                           // (5) C++20

      constexpr month_weekday
        operator/(const month& m, const weekday_indexed& wdi) noexcept; // (6) C++20
      constexpr month_weekday
        operator/(int m, const weekday_indexed& wdi) noexcept;          // (7) C++20

      constexpr month_weekday_last
        operator/(const month& m, const weekday_last& wdl) noexcept;    // (8) C++20
      constexpr month_weekday_last
        operator/(int m, const weekday_last& wdl) noexcept;             // (9) C++20
    }

## 概要

カレンダー要素同士をつなぎ合わせる。

- (1) : `month`型と`day`型をつなぎ、月と日の両方の情報をもつ型にまとめる
- (2) : `month`型と`int`型での日の値をつなぎ、月と日の両方の情報をもつ型にまとめる
- (3) : `int`型での月の値と`day`型をつなぎ、月と日の両方の情報をもつ型にまとめる
- (4) : `month`型と終了値を受け取り、月と月の最終日の情報をもつ型にまとめる
- (5) : `int`型での月の値と終了値を受け取り、月と月の最終日の情報をもつ型にまとめる
- (6) : `month`型とN番目の曜日を受け取り、月とN番目の曜日の情報をもつ型にまとめる
- (7) : `int`型での月の値と、N番目の曜日を受け取り、月とN番目の曜日の情報をもつ型にまとめる
- (8) : `month`型と月の最終指定曜日を受け取り、月と月の最終指定曜日の情報をもつ型にまとめる
- (9) : `int`型での月の値と、月の最終指定曜日を受け取り、月と月の最終指定曜日の情報をもつ型にまとめる

## 戻り値

- (1) : `return {m, d};`
- (2) : `return m / day{d};`
- (3) : `return month{m} / d;`
- (4) : `return month_day_last{m};`
- (5) : `return month{m} / last;`
- (6) : `return {m, wdi};`
- (7) : `return month{m} / wdi;`
- (8) : `return {m, wdl};`
- (9) : `return month{m} / wdl;`

## 例外

投げない

## 例

    #include <cassert>
    #include <chrono>

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

    int main()
    {
      // 3月1日 (年の情報をもたない)
      chrono::month_day md1 = chrono::March/1d;
      chrono::month_day md2 = chrono::March/1;
      chrono::month_day md3 = 3/1d;
      assert(md1.month() == chrono::March);
      assert(md1.day() == 1d);
      assert(md1 == md2);
      assert(md1 == md3);

      // 2月の最終日 (年の情報をもたないため、2月かどうかに関わらず日を算出できない状態)
      chrono::month_day_last mdl1 = chrono::February/chrono::last;
      chrono::month_day_last mdl2 = 2/chrono::last;
      assert(mdl1.month() == chrono::February);
      assert(mdl1 == mdl2);

      // 3月の最初の日曜日 (年の情報をもたないため、日を算出できない状態)
      chrono::month_weekday mw1 = chrono::March/chrono::Sunday[0];
      chrono::month_weekday mw2 = 3/chrono::Sunday[0];
      assert(mw1.month() == chrono::March);
      assert(mw1.weekday_indexed() == chrono::Sunday[0]);
      assert(mw1 == mw2);

      // 3月の最後の日曜日 (年の情報をもたないため、日を算出できない状態)
      chrono::month_weekday_last mwl1 = chrono::March/chrono::Sunday[chrono::last];
      chrono::month_weekday_last mwl2 = 3/chrono::Sunday[chrono::last];
      assert(mwl1.month() == chrono::March);
      assert(mwl1.weekday_last() == chrono::Sunday[chrono::last]);
      assert(mwl1 == mwl2);
    }

### 出力

## バージョン

### 言語

- C++20

### 処理系

- Clang: 8.0 ✅
- GCC: 11.1 ✅
- Visual C++: 2019 Update 3 ❌