最終更新日時: 2023年10月31日 11時22分16秒 (JST)
Ryo Suzuki が更新

履歴 編集

class template
<functional>

# std::ranges::greater(C++20)

    namespace std::ranges {
      struct greater {
        template<class T, class U>
          requires totally_ordered_with<T, U>
        constexpr bool operator()(T&& t, U&& u) const;

        using is_transparent = unspecified;
      };
    }

## 概要

`greater`クラスは、左辺が右辺より大きいかの比較を行う関数オブジェクトである。

この関数オブジェクトは一切のメンバ変数を持たず、状態を保持しない。

## テンプレートパラメータ制約

- `T` と `U` の間で`< <= > >=`の演算子による比較が可能であり、その順序付けが全順序の要件を満たしている。
- もしくは、 `declval<T>() < declval<U>()` がポインタ同士を比較する組み込みの演算に帰着する。

## メンバ関数

名前 | 説明
--- | ---
`operator ()` | `ranges::less{}(std::forward<U>(u), std::forward<T>(t));` と等価

## メンバ型

名前 | 説明
--- | ---
`is_transparent` | `operator()` が関数テンプレートである事を示すタグ型。 実装依存の型であるがあくまでタグ型であり、型そのものには意味はない。

## 例

    #include <iostream>
    #include <functional>

    int main()
    {
      std::cout << std::boolalpha << std::ranges::greater()(3, 2) << std::endl;
    }

### 出力

    true

## 参照

- N4821 20.14.8 Concept-constrained comparisons