Namespaces
Variants

std::chrono:: operator+, std::chrono:: operator- (std::chrono::year_month_weekday)

From cppreference.net
(注:このHTML要素には翻訳対象のテキストコンテンツが含まれていないため、元の構造を保持したまま出力します)
(1) (C++20以降)
(2) (C++20以降)
(3) (C++20以降)
(4) (C++20以降)
(5) (C++20以降)
(6) (C++20以降)
1,2) dm. count ( ) ヶ月を ymwd が表す日付に加算します。結果は std:: chrono :: year_month ( ymwd. year ( ) , ymwd. month ( ) ) + dm と同じ year() および month() を持ち、 ymwd と同じ weekday() および index() を持ちます。
3,4) dy. count ( ) 年を ymwd が表す日付に加算する。結果は std:: chrono :: year_month_weekday ( ymwd. year ( ) + dy, ymwd. month ( ) , ymwd. weekday_indexed ( ) ) と等価である。
5) 指定された日付から dm. count ( ) ヶ月を減算します。 ymwd で表される日付から ymwd + - dm と等価です。
6) ymwd が表す日付から dy. count ( ) 年を減算します。 ymwd + - dy と等価です。

std::chrono::years std::chrono::months の両方に変換可能な期間型の場合、呼び出しが曖昧になる可能性があるときは years オーバーロード (3,4,6) が優先されます。

注記

ymwd. ok ( ) true であっても、 ymwd. index ( ) 5 の場合、結果の year_month_weekday は有効な日付を表さない可能性があります。

#include <cassert>
#include <chrono>
#include <iostream>
int main()
{
    auto ymwdi{1/std::chrono::Wednesday[1]/2021};
    std::cout << ymwdi << '\n';
    ymwdi = std::chrono::years(5) + ymwdi;
    // 2026年1月の第1水曜日
    std::cout << ymwdi << '\n';
    assert(static_cast<std::chrono::year_month_day>(ymwdi) ==
           std::chrono::January/7/2026);
    ymwdi = ymwdi - std::chrono::months(6);
    // 2025年7月の第1水曜日
    std::cout << ymwdi << '\n';
    assert(static_cast<std::chrono::year_month_day>(ymwdi) ==
           std::chrono::July/2/2025);
}

出力:

2021/Jan/Wed[1]
2026/Jan/Wed[1]
2025/Jul/Wed[1]