`equality_comparable_with`は` common_reference`を必要とする必要がありますか?


12

コンセプトは、equality_­comparable_with<T, U>タイプのオブジェクトを宣言することを目的とTし、U互いに等しく比較することができ、それらがある場合、これは予想される意味を持ちます。それはいいです。

ただし、この概念もcommon_reference_t<T&, U&>存在する必要があります。主な推進力common_referenceとそれに付随する機能は、プロキシイテレータ有効にし、そのようなイテレータ間のreferenceとの関係を表す場所を設けることvalue_typeです。

それは素晴らしいことですが... a Tとa Uが互いに等しいかどうかをテストできるかどうかをテストすることとは何ですか?なぜ標準はそれTを必要とし、Uそれらを等しく比較できるようにするために共通の参照関係を持っているのですか?

これは、論理的に比較可能な共通参照関係を合理的に持たない2つのタイプを持つことが非常に困難な、奇妙な状況を作り出します。例えば、vector<int>およびpmr::vector<int>論理的には同等であるべきです。しかし、そうでなければ関係のない2つのタイプの間に妥当な共通参照がないため、そうなることはありません。


@Marshallはこの質問を承認します。
バリー

まあassignable_from必要なのはcommon_reference...
cpplearner

@cpplearner:割り当ては、プロキシ参照と値が共有することが期待されるプロパティであるため、少なくともいくらか意味があります。
Nicol Bolas

回答:


4

これは、パロアルトのレポート、§3.3とD.2にまで遡ります。

クロスタイプの概念を数学的に正しくするには、クロスタイプ比較の意味を定義する必要があります。の場合equality_comparable_with、はt == u一般的にtuが等しいことを意味しますが、異なるタイプの2つの値が等しいとはどういう意味ですか?設計では、タイプ間の等価性はそれらを共通の(参照)タイプにマッピングすることによって定義されると述べています(この変換は値を保持するために必要です)。

の強い公理がequality_comparable_with望ましくない場合、標準は説明のみの概念を使用し、weakly-equality-comparable-withその概念は共通の参照を必要としません。これは、(ケイシー・カーターの言葉で)「セマンティック醜態」、しかし、であり、その理由は博覧会専用です:それは持つことができますt == uし、t2 == uしかし、t != t2(これは実際に歩哨のために必要です)。


2
それは興味深いですが、「数学的に健全な」ソリューションにこの「共通参照」タイプが含まれる理由が説明されていませ。だからこそ、それは代わりに(のような変換を許可することができない、論理的、数学的に健全な概念を可能にする何かを、この暗黙の参照変換ビジネスを行う伴わず、であるcontainer<T, stuff>container<U, other_stuff>あれば同等のものTに匹敵しますかU)?それだけcommon_referenceが利用可能でしたか、それともそれ以上のものですか?
Nicol Bolas

common_reference型への変換関数がエピモーフィズムであるという考えはありません。
Oliv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.