El conceptoequality_comparable_with<T, U>
tiene la intención de declarar que los objetos de tipo T
y U
se pueden comparar iguales entre sí, y si lo son, entonces esto tiene el significado esperado. Esta bien.
Sin embargo, este concepto también requiere common_reference_t<T&, U&>
existir. El ímpetu principal common_reference
y la funcionalidad que lo acompaña parecen ser habilitar los iteradores proxy , tener un lugar para representar la relación entre reference
y value_type
para dichos iteradores.
Eso es genial, pero ... ¿qué tiene eso que ver con probar si a T
y a U
se pueden comparar entre sí? ¿Por qué el estándar requiere eso T
y U
tiene una relación de referencia común solo para permitirle compararlos de la misma manera?
Esto crea situaciones extrañas en las que es muy difícil tener dos tipos que no tengan una relación de referencia común que sean lógicamente comparables. Por ejemplo, vector<int>
y pmr::vector<int>
lógicamente debería ser comparable. Pero no pueden serlo porque no hay una referencia común razonable entre los dos tipos que de otro modo no estarían relacionados.
assignable_from
requiere common_reference
...