Koncepcjaequality_comparable_with<T, U>
ma zadeklarować, że obiekty typu T
i U
można porównać sobie równe, a jeśli są, to ma oczekiwaną znaczenie. W porządku.
Jednak ta koncepcja również musi common_reference_t<T&, U&>
istnieć. Głównym impulsem common_reference
i towarzyszącą mu funkcją wydaje się być umożliwienie iteratorom proxy , aby mieć miejsce do reprezentowania relacji między takimi iteratorami reference
i value_type
dla nich.
To świetnie, ale ... co to ma wspólnego z testowaniem, jeśli a T
i a U
można porównać równe sobie? Dlaczego standard tego wymaga T
i U
ma wspólną relację odniesienia, aby umożliwić porównanie ich na równi?
Stwarza to sytuacje nieparzystej gry, w których bardzo trudno jest mieć dwa typy, które nie mają rozsądnie wspólnego stosunku odniesienia, który jest logicznie porównywalny. Na przykład vector<int>
i pmr::vector<int>
logicznie powinno być porównywalne. Ale nie mogą tak być, ponieważ nie ma rozsądnego wspólnego odniesienia między tymi dwoma niezwiązanymi ze sobą typami.
assignable_from
wymaga common_reference
...