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

From cppreference.com
< cpp‎ | chrono‎ | year
Date and time library
Time point
(C++11)
(C++20)
Duration
(C++11)
Clocks
(C++11)
(C++11)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
Time of day
(C++20)(C++20)
(C++20)(C++20)
(C++20)

Calendar
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)(C++20)
Time zone
(C++20)
(C++20)
(C++20) (C++20) (C++20) (C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
chrono I/O
(C++20)
C-style date and time
constexpr std::chrono::year operator+ ( const std::chrono::year & y,
const std::chrono::years & ys ) noexcept ;
(1) (since C++20)
constexpr std::chrono::year operator+ ( const std::chrono::years & ys,
const std::chrono::year & y ) noexcept ;
(2) (since C++20)
constexpr std::chrono::year operator- ( const std::chrono::year & y,
const std::chrono::years & ys ) noexcept ;
(3) (since C++20)
constexpr std::chrono::years operator- ( const std::chrono::year & y1,
const std::chrono::year & y2 ) noexcept ;
(4) (since C++20)
1,2) Adds ys.count() years to y
3) Subtracts ys.count() years from y
4) Returns the difference in years between y1 and y2.

Return value

1,2) std::chrono::year ( int (y) + ys.count ( ) )
3) std::chrono::year ( int (y) - ys.count ( ) )
4) std::chrono::years ( int (y1) - int (y2) )

Notes

If the resulting year value for (1-3) is outside the range [ -32767 32767 ]

The result of subtracting two year values is a duration of type std::chrono::years 2018y - 2017y is std::chrono::years ( 1 )

Example

#include <cassert>
#include <chrono>
 
int main()
{
    std::chrono::year y{2020};
 
    y = std::chrono::years(12) + y; // overload (2): duration + time point
    assert(y == std::chrono::year(2032));
 
    y = y - std::chrono::years(33); // overload (3): time point - duration
    assert(y == std::chrono::year(1999));
 
    // y = std::chrono::years(33) - y; // not supported: duration - time point
 
    using namespace std::chrono;
    constexpr std::chrono::years ys = 2025y - 2020y; // overload (4)
    static_assert(ys == std::chrono::years(5));
}

See also

increments or decrements the month
(public member function of std::chrono::month)
adds or subtracts a number of months
(public member function of std::chrono::month)