Namespaces
Variants

std::experimental::ranges:: equal_to

From cppreference.net
template < class T = void >

requires EqualityComparable < T > ||
Same < T, void > ||
/* == on two const T lvalues invokes a built-in operator comparing pointers */

struct equal_to ;
(ranges TS)
template <>
struct equal_to < void > ;
(ranges TS)

比較を実行するための関数オブジェクト。プライマリテンプレートは型 T のconst左値に対して operator == を呼び出します。特殊化 equal_to<void> は関数呼び出し演算子のパラメータ型を引数から推論します(ただし戻り値の型は除く)。

equal_to のすべての特殊化は、 Semiregular です。

目次

メンバー型

メンバー型 定義
is_transparent ( equal_to<void> 特殊化のメンバーのみ) /* 未指定 */

メンバー関数

operator()
引数が 等しい かどうかをチェックする
(public member function)

std::experimental::ranges::equal_to:: operator()

constexpr bool operator ( ) ( const T & x, const T & y ) const ;
(1) (primary template equal_to<T> のメンバーのみ)
template < class T, class U >

requires EqualityComparableWith < T, U > ||
/* std::declval<T>() == std::declval<U>() が
ポインタを比較する組み込み演算子に解決される場合 */

constexpr bool operator ( ) ( T && t, U && u ) const ;
(2) (特殊化 equal_to<void> のメンバーのみ)
1) x y を比較する。 return ranges:: equal_to <> { } ( x, y ) ; と等価。
2) t u を比較する。 return std:: forward < T > ( t ) == std:: forward < U > ( u ) ; と等価。ただし、その式がポインタを比較する組み込み operator == の呼び出しに解決される場合は除く。

(1) または (2) の呼び出しが型 P のポインタを比較する組み込み演算子を呼び出す場合、結果は代わりに以下のように決定される:

  • 第1引数の(変換された可能性のある)値と第2引数の(変換された可能性のある)値の一方が、型 P の全てのポインタ値に対する実装定義の厳密な全順序において他方より前にある場合、 false を返す。この厳密な全順序は、組み込み演算子 < > <= >= によって課される半順序と整合性がある。
  • それ以外の場合(どちらも他方より前ではない場合)、 true を返す。

T U から P への変換シーケンスが両方とも等価性を保存する(下記参照)場合を除き、動作は未定義である。

等価性保存

式が 等価性を保存する とは、等しい入力が与えられたときに等しい出力をもたらすことである。

  • 式への入力は、その被演算子から構成される。
  • 式からの出力は、その結果と、式によって変更されるすべての被演算子(もしあれば)から構成される。

等価性を保存することが要求されるすべての式は、さらに 安定 であることが要求される:そのような式の2回の評価は、同じ入力オブジェクトに対して、それらの入力オブジェクトに対する明示的な介在する変更がない限り、等しい出力を持たなければならない。

注記

std::equal_to とは異なり、 ranges::equal_to == != の両方が( EqualityComparable および EqualityComparableWith 制約を通じて)有効であることを要求します。

関連項目

関数オブジェクトの実装 x == y
(クラステンプレート)