Namespaces
Variants

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

From cppreference.net
Определено в заголовке <chrono>
(начиная с C++20)
(начиная с C++20)
(начиная с C++20)
(начиная с C++20)
(начиная с C++20)
(начиная с C++20)
1,2) Добавляет dm. count ( ) месяцев к дате, представленной ymdl . Результат имеет те же year() и month() , что и std:: chrono :: year_month ( ymdl. year ( ) , ymdl. month ( ) ) + dm .
3,4) Добавляет dy. count ( ) лет к дате, представленной ymdl . Результат эквивалентен std:: chrono :: year_month_day_last ( ymdl. year ( ) + dy, ymdl. month_day_last ( ) ) .
5) Вычитает dm. count ( ) месяцев из даты, представленной ymdl . Эквивалентно ymdl + - dm .
6) Вычитает dy. count ( ) лет из даты, представленной ymdl . Эквивалентно ymdl + - dy .

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

Пример

#include <cassert>
#include <chrono>
#include <iostream>
int main()
{
    auto ymdl{11/std::chrono::last/2020};
    std::cout << ymdl << '\n';
    ymdl = std::chrono::years(10) + ymdl;
    std::cout << ymdl << '\n';
    assert(ymdl == std::chrono::day(30)/
                   std::chrono::November/
                   std::chrono::year(2030));
    ymdl = ymdl - std::chrono::months(6);
    std::cout << ymdl << '\n';
    assert(ymdl == std::chrono::day(31)/
                   std::chrono::May/
                   std::chrono::year(2030));
}

Вывод:

2020/Nov/last
2030/Nov/last
2030/May/last