std::chrono...eekday_last)(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

From the C++ Standard Libary manual, page std::chrono...eekday_last)(3) β€” the title alone is a keyboard smash, but we’re gonna make it make sense. πŸ’…

πŸ’– NAME πŸ’–

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

That’s the whole name, bestie. Yes, twice. No cap. 🫢

✨ Synopsis ✨

Okay so all of these are constexpr and noexcept, and every single one is (since C++20):

constexpr std::chrono::year_month_weekday_last
    operator+( const std::chrono::year_month_weekday_last& ymwdl,
               const std::chrono::months& dm ) noexcept;
(since C++20)

constexpr std::chrono::year_month_weekday_last
    operator+( const std::chrono::months& dm,
               const std::chrono::year_month_weekday_last& ymwdl )
noexcept;
(since C++20)

constexpr std::chrono::year_month_weekday_last
    operator+( const std::chrono::year_month_weekday_last& ymwdl,
               const std::chrono::years& dy ) noexcept;
(since C++20)

constexpr std::chrono::year_month_weekday_last
    operator+( const std::chrono::years& dy,
               const std::chrono::year_month_weekday_last& ymwdl )
noexcept;
(since C++20)

constexpr std::chrono::year_month_weekday_last
    operator-( const std::chrono::year_month_weekday_last& ymwdl,
               const std::chrono::months& dm ) noexcept;
(since C++20)

constexpr std::chrono::year_month_weekday_last
    operator-( const std::chrono::year_month_weekday_last& ymwdl,
               const std::chrono::years& dy ) noexcept;
(since C++20)

🌸 Description 🌸

okay so here’s the vibe check on what each overload actually does:

  • 1,2) Adds dm.count() months to the date represented by ymwdl. The result has the same year() and month() as std::chrono::year_month(ymwdl.year(), ymwdl.month()) + dm, and the same weekday() as ymwdl.
  • 3,4) Adds dy.count() years to the date represented by ymwdl. The result is equivalent to std::chrono::year_month_weekday_last(ymwdl.year() + dy, ymwdl.month(), ymwd.weekday_last()).
  • 5) Subtracts dm.count() months from the date represented by ymwdl. Equivalent to ymwdl + -dm.
  • 6) Subtracts dy.count() years from the date represented by ymwdl. Equivalent to ymwdl + -dy.
🌈 Ambiguity note, iykyk: For durations that are convertible to both std::chrono::years and std::chrono::months, the years overloads (3,4,6) are preferred if the call would otherwise be ambiguous.

πŸŽ€ Example πŸŽ€

literally run this code:

// Run this code

#include <cassert>
#include <chrono>
using namespace std::chrono;

int main()
{
    constexpr auto ymwdl1{Tuesday[last]/11/2021};
    auto ymwdl2 = ymwdl1;
    ymwdl2 = std::chrono::months(12) + ymwdl2;
    ymwdl2 = ymwdl2 - std::chrono::years(1);
    assert(ymwdl1 == ymwdl2);
}

That’s the whole page, bestie. Source: http://cppreference.com, version/date 2024.06.10. Go off and chrono responsibly β€” periodt. πŸ’–βœ¨

πŸ“¦ where this page comes from