std::chrono...::operator-=(3)

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

πŸ’… std::chrono...::operator-=(3) πŸ’…

okay bestie, welcome to the std::chrono...::operator-=(3) page from the C++ Standard Libary β€” yes, that’s the manual name, typo and all, and we are keeping it πŸ’– This is the group chat where std::chrono::year_month learns to plus-equals and minus-equals, and honestly? iconic.


✨ NAME ✨

The NAME block is serving copy-paste realness, so here’s the exact thing it lists β€” twice, because the page says it twice, no cap:

  • std::chrono::year_month::operator+=,std::chrono::year_month::operator-=
  • and again: std::chrono::year_month::operator+=,std::chrono::year_month::operator-=

🌸 Synopsis 🌸

Here’s the overload lineup πŸ’… all four are constexpr, all four are noexcept, and all four are since C++20:

          constexpr std::chrono::year_month&                              (1)
       (since C++20)
              operator+=( const std::chrono::years& dy ) const noexcept;
          constexpr std::chrono::year_month&                              (2)
       (since C++20)
              operator+=( const std::chrono::months& dm ) const noexcept;
          constexpr std::chrono::year_month&                              (3)
       (since C++20)
              operator-=( const std::chrono::years& dy ) const noexcept;
          constexpr std::chrono::year_month&                              (4)
       (since C++20)
              operator-=( const std::chrono::months& dm ) const noexcept;

Okay so what does it actually do? It modifies the time point *this represents by the duration dy or dm ✨

  1. Equivalent to *this = *this + dy;.
  2. Equivalent to *this = *this + dm;.
  3. Equivalent to *this = *this - dy;.
  4. Equivalent to *this = *this - dm;.
For durations that are convertible to both std::chrono::years and std::chrono::months, the years overloads (1,3) are preferred if the call would otherwise be ambiguous. that’s the rule, bestie, write it down 🫢

πŸŽ€ Example πŸŽ€

Run this code β€” it’s literally the demo, and it’s kind of a slay:

// Run this code

#include <cassert>
#include <chrono>

int main()
{
    auto ym{std::chrono::day(1)/7/2023};

    ym -= std::chrono::years{2};
    assert(ym.month() == std::chrono::July);
    assert(ym.year() == std::chrono::year(2021));

    ym += std::chrono::months{7};
    assert(ym.month() == std::chrono::month(2));
    assert(ym.year() == std::chrono::year(2022));
}

🌈 See also 🌈

  • operator+ performs arithmetic on year_month
  • operator- (function)
  • (C++20)

source/version: http://cppreference.com Β· date: 2024.06.10 Β· page: std::chrono...::operator-=(3) β€” mwah πŸ’‹ that’s the footer, bestie, and we are so done here 🫢

πŸ“¦ where this page comes from