Namespaces
Variants

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

From cppreference.net
(注:指定されたHTML要素には翻訳対象のテキストが含まれていないため、元の構造をそのまま保持します)
ヘッダーで定義 <chrono>
(C++20以降)
(C++20以降)
constexpr std:: chrono :: year_month_day operator + ( const std:: chrono :: year_month_day & ymd,

const std:: chrono :: years & dy

) noexcept ;
(C++20以降)
constexpr std:: chrono :: year_month_day operator + ( const std:: chrono :: years & dy,

const std:: chrono :: year_month_day & ymd

) noexcept ;
(C++20以降)
(C++20以降)
constexpr std:: chrono :: year_month_day operator - ( const std:: chrono :: year_month_day & ymd,

const std:: chrono :: years & dy

) noexcept ;
(C++20以降)
1,2) ymd が表す日付に dm. count ( ) か月を加算します。結果は ymd と同じ day ( ) を持ち、 std:: chrono :: year_month ( ymd. year ( ) , ymd. month ( ) ) + dm と同じ year ( ) および month ( ) を持ちます。
3,4) dy. count ( ) 年分を ymd が表す日付に加算します。結果は std:: chrono :: year_month_day ( ymd. year ( ) + dy, ymd. month ( ) , ymd. day ( ) と等価です。
5) 日付 ymd が表す日付から dm. count ( ) ヶ月を減算します。 ymd + - dm と等価です。
6) 日付 ymd が表す日付から dy. count ( ) 年を減算します。 ymd + - dy と同等です。

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

注記

ymd. ok ( ) true であっても、 ymd. day ( ) が29、30、または31の場合、結果の year_month_day は有効な日付を表さない可能性があります。

#include <chrono>
#include <iostream>
int main()
{
    std::cout << std::boolalpha;
    auto ymd{std::chrono::day(1)/std::chrono::July/2021};
    ymd = ymd + std::chrono::months(4);
    std::cout << (ymd.month() == std::chrono::November) << ' '
              << (ymd.year() == std::chrono::year(2021)) << ' ';
    ymd = ymd - std::chrono::years(10);
    std::cout << (ymd.month() == std::chrono::month(11)) << ' '
              << (ymd.year() == std::chrono::year(2011)) << '\n';
}

出力:

true true true true