Namespaces
Variants

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

From cppreference.net
(Примечание: В данном фрагменте HTML отсутствует текстовое содержимое для перевода - присутствуют только 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) Добавляет dm. count ( ) месяцев к дате, представленной ymd . Результат имеет тот же day ( ) , что и ymd , и тот же year ( ) и month ( ) , что и std:: chrono :: year_month ( ymd. year ( ) , ymd. month ( ) ) + dm .
3,4) Добавляет dy. count ( ) лет к дате, представленной ymd . Результат эквивалентен std:: chrono :: year_month_day ( ymd. year ( ) + dy, ymd. month ( ) , ymd. day ( ) .
5) Вычитает dm. count ( ) месяцев из даты, представленной ymd . Эквивалентно ymd + - dm .
6) Вычитает dy. count ( ) лет из даты, представленной ymd . Эквивалентно ymd + - dy .

Для длительностей, которые конвертируются как в std::chrono::years , так и в std::chrono::months , перегрузки years (3,4,6) имеют приоритет, если вызов иначе был бы неоднозначным.

Примечания

Даже если ymd. ok ( ) возвращает true , результирующий year_month_day может не представлять корректную дату, если ymd. day ( ) равен 29, 30 или 31.

Пример

#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