Le conceptequality_comparable_with<T, U>
est destiné à déclarer que les objets de type T
et U
peuvent être comparés égaux les uns aux autres, et s'ils le sont, alors cela a la signification attendue. C'est très bien.
Cependant, ce concept doit également common_reference_t<T&, U&>
exister. L'impulsion principale pour common_reference
et sa fonctionnalité associée semble être de permettre aux itérateurs proxy , d'avoir un endroit pour représenter la relation entre reference
et value_type
pour de tels itérateurs.
C'est super, mais ... qu'est-ce que cela a à voir avec le test si a T
et a U
peuvent être comparés égaux l'un à l'autre? Pourquoi la norme l'exige-t-elle T
et U
a-t-elle une relation de référence commune juste pour vous permettre de les comparer égales?
Cela crée des situations bizarres où il est très difficile d'avoir deux types qui n'ont pas raisonnablement une relation de référence commune qui sont logiquement comparables. Par exemple, vector<int>
et pmr::vector<int>
devrait logiquement être comparable. Mais ils ne peuvent pas l'être parce qu'il n'y a pas de référence commune raisonnable entre les deux types par ailleurs non liés.
assignable_from
nécessite common_reference
...