Namespaces
Variants

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

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

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

Примечания

Даже если ymwd. ok ( ) возвращает true , результирующий year_month_weekday может не представлять корректную дату, если ymwd. index ( ) равен 5 .

Пример

#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 года
    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 года
    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]