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

履歴 編集

function
<chrono>

# std::chrono::year_month::operator-=(C++20)

    constexpr year_month& operator-=(const months& dm) noexcept; // (1) C++20
    constexpr year_month& operator-=(const years& dy) noexcept;  // (2) C++20

## 概要

`year_month`の値に対して減算の複合代入を行う。

- (1) : 月の時間間隔を減算する
- (2) : 年の時間間隔を減算する

パラメータの型が、カレンダー時間の`month`、`year`ではなく、時間間隔を表す`months`、`years`であることに注意。

## テンプレートパラメータ制約

- (1) : `months`パラメータに指定した引数が`years`に変換可能である場合、`years`への暗黙変換は、`months`への暗黙変換よりも劣る

## 効果

- (1) : `*this = *this - dm`
- (2) : `*this = *this - dy`

## 戻り値

- (1), (2) : `*this`

## 例外

投げない

## 例

    #include <iostream>
    #include <chrono>

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

    int main()
    {
      chrono::year_month date = 2020y/3;

      date -= chrono::months{1}; // 1ヶ月戻す
      date -= chrono::years{1};  // 1年戻す

      std::cout << date << std::endl;
    }

### 出力

    2019/Feb

## バージョン

### 言語

- C++20

### 処理系

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

## 参照

- LWG Issue 3260. `year_month*` arithmetic rejects durations convertible to `years`