std::equal_...,less_equal,(3)

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

πŸ’… std::equal_to, not_equal_to, less, greater, less_equal, greater_equal πŸ’…

okay so bestie, welcome to the C++ Standard Libary (3) manual page β€” page tag std::equal_...,less_equal,(3), manual name folded in right here, and we are not doing a boring copy-paste header line. This page is about the standard comparison function objects being partially specialized for std::experimental::propagate_const<T>. It's niche! It's specific! It's giving library-fundamentals-TS-v2 realness, and honestly? iconic. πŸ¦‹βœ¨


🌸 NAME 🌸

The NAME line is literally this, truncated energy and all:

std::equal_to,not_equal_to,less,greater,less_equal, -
std::equal_to,not_equal_to,less,greater,less_equal,

no cap, we're keeping it exactly like that. πŸ’…


✨ Synopsis ✨

Defined in header <experimental/propagate_const>.

template< class T > struct equal_to<std::experimental::propagate_const<T>>;
template< class T > struct not_equal_to<std::experimental::propagate_const<T>>;
template< class T > struct less<std::experimental::propagate_const<T>>;
template< class T > struct greater<std::experimental::propagate_const<T>>;
template< class T > struct less_equal<std::experimental::propagate_const<T>>;
template< class T > struct greater_equal<std::experimental::propagate_const<T>>;

Each one of those is tagged (library fundamentals TS v2) in the original. periodt. πŸŽ€

The standard comparison function objects are partially specialized for std::experimental::propagate_const<T>.

Let p.t_ denote the pointer-like object wrapped by a std::experimental::propagate_const<T> p, then given objects p and q of type std::experimental::propagate_const<T>, the following shall hold:

  • std::equal_to<std::experimental::propagate_const<T>>()(p, q) == std::equal_to<T>()(p.t_, q.t_)
  • std::not_equal_to<std::experimental::propagate_const<T>>()(p, q) == std::not_equal_to<T>()(p.t_, q.t_)
  • std::less<std::experimental::propagate_const<T>>()(p, q) == std::less<T>()(p.t_, q.t_)
  • std::greater<std::experimental::propagate_const<T>>()(p, q) == std::greater<T>()(p.t_, q.t_)
  • std::less_equal<std::experimental::propagate_const<T>>()(p, q) == std::less_equal<T>()(p.t_, q.t_)
  • std::greater_equal<std::experimental::propagate_const<T>>()(p, q) == std::greater_equal<T>()(p.t_, q.t_)

These are the exact requirements, bestie. The vibes are mathematical. 🫢


πŸ’­ Notes πŸ’­

Lowkey the whole point: these specializations ensure that when T is a pointer type, specializations of these class templates for std::experimental::propagate_const<T> yield a total order, even if the corresponding built-in operators do not. Slay for total order, periodt. πŸ”₯


😭 Example 😭

This section is incomplete Reason: no example

not me showing up with zero example β€” that's literally what the page says, so we're not inventing one. πŸ™ˆ


πŸ¦‹ See also πŸ¦‹

  • equal_to β€” function object implementing x == y (class template)
  • not_equal_to β€” function object implementing x != y (class template)
  • less β€” function object implementing x < y (class template)
  • greater β€” function object implementing x > y (class template)
  • less_equal β€” function object implementing x <= y (class template)
  • greater_equal β€” function object implementing x >= y (class template)

πŸŽ€ Category: πŸŽ€

  • Todo no example

mwah πŸ’‹ β€” source/version: http://cppreference.com; date: 2024.06.10; page tag: std::equal_...,less_equal,(3). byeee bestie 🫢🌈

πŸ“¦ where this page comes from