`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를 서로 비교할 수 있다면 테스트와 어떤 관련이 있습니까? 표준가 요구하는 것은 왜 TU공통의 참조 관계를 가지고 당신이 그들을 동일 비교할 수 있도록?

논리적으로 비교 가능한 공통 참조 관계를 갖지 않는 두 가지 유형을 갖는 것이 매우 어려운 이상한 상황을 만듭니다. 예를 들어, vector<int>그리고 pmr::vector<int>논리적으로는 비교할 수해야한다. 그러나 다른 두 관련이없는 유형 사이에 합리적인 공통 참조가 없기 때문에 가능하지 않습니다.


@Marshall은이 질문을 승인 할 것입니다.
배리

그래서 심지어는 assignable_from필요 common_reference...
cpplearner

@cpplearner : 할당은 프록시 참조와 값이 공유 할 것으로 예상되는 속성이므로 적어도 어느 정도 의미가 있습니다.
Nicol Bolas

답변:


4

이것은 Palo Alto 보고서 , §3.3 및 D.2 로 거슬러 올라갑니다 .

교차 유형 개념이 수학적으로 견고 해지려면 교차 유형 비교의 의미를 정의해야합니다. 를 들어 equality_comparable_with, t == u일반적 의미 tu동일하지만이 경우에도 동일하게 다른 유형의 두 값이 무엇을 의미합니까? 이 설계에서는 교차 유형 평등을 공통 (참조) 유형에 매핑하여 정의합니다 (값을 유지하려면이 변환이 필요함).

강한 공리 equality_comparable_with가 바람직하지 않은 경우, 표준은 박람회 전용 개념 weakly-equality-comparable-with을 사용하며 해당 개념은 공통 참조가 필요하지 않습니다. 그것은 (케이시 카터의 말)는 "의미 가증"그러나이며, 박람회 전용 그 이유이다 : 그것은 가지고 있습니다 t == ut2 == 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.