std::chrono...:year_month)(3)

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

🌸 std::chrono...:year_month)(3) 🌸

okay so this is the page std::chrono...:year_month)(3), straight out of the C++ Standard Libary manual β€” yes, that’s the manual name, typo and all, and we’re obsessed. It’s all about comparing std::chrono::year_month values, and it’s giving very C++20 main character energy. πŸ’…


✨ NAME ✨

The name is std::chrono::operator==,(std::chrono::year_month) - and then, for the encore, std::chrono::operator==,(std::chrono::year_month). The comma is not a typo, bestie β€” we copy it exactly. 🫢


πŸ’– Synopsis πŸ’–

          Defined in header <chrono>
          constexpr bool operator==( const std::chrono::year_month& x,
                                     const std::chrono::year_month& y )
       (1) (since C++20)
          noexcept;
          constexpr std::strong_ordering operator<=>( const
          std::chrono::year_month& x,
       (2) (since C++20)
                                                      const
          std::chrono::year_month& y ) noexcept;

What it does: compares the two year_month values x and y. That’s the whole plot, no cap. ✨

And because C++ is extra in the best way, the <, <=, >, >=, and != operators are synthesized from operator<=> and operator== respectively. So you get the whole comparison friend group without hand-writing every single one. iconic.


πŸ’– Return value πŸ’–

  1. x.year() == y.year() && x.month() == y.month()
  2. x.year() <=> y.year() != 0 ? x.year() <=> y.year() : x.month() <=> y.month()

πŸŽ€ Example πŸŽ€

       // Run this code

        #include <chrono>
        #include <iostream>

        int main()
        {
            using namespace std::chrono;

            constexpr year_month ym1{year(2021), month(7)};
            constexpr year_month ym2{year(2021)/7};
            static_assert(ym1 == ym2);
            std::cout << ym1 << '\n';

            static_assert((2020y/1 < 2020y/2) && (2020y/2 == 2020y/2) &&
       (2020y/3 <= 2021y/3) &&
                          (2023y/1 > 2020y/2) && (3020y/2 != 2020y/2) &&
       (2020y/3 >= 2020y/3));
        }

Output:

2021/Jul

mwah πŸ’‹ β€” footer check, bestie: source is http://cppreference.com, version/date is 2024.06.10, and the page is std::chrono...:year_month)(3). That’s the whole manual page, and she ate. 🌈✨

πŸ“¦ where this page comes from