Il concetto ha loequality_comparable_with<T, U>
scopo di dichiarare che gli oggetti di tipo T
e U
possono essere confrontati uguali tra loro, e se lo sono, allora questo ha il significato atteso. Va bene.
Tuttavia, questo concetto richiede anche common_reference_t<T&, U&>
di esistere. L'impulso principale per common_reference
e la sua funzionalità relativa sembra essere quello di consentire agli iteratori proxy , di avere un posto per rappresentare la relazione tra reference
e value_type
per tali iteratori.
È fantastico, ma ... cosa c'entra con il test se a T
e a U
possono essere confrontati uguali tra loro? Perché lo standard lo richiede T
e U
ha una relazione di riferimento comune solo per permetterti di confrontarli uguali?
Questo crea situazioni strane in cui è molto difficile avere due tipi che non hanno ragionevolmente una relazione di riferimento comune logicamente comparabili. Ad esempio, vector<int>
e pmr::vector<int>
logicamente dovrebbe essere comparabile. Ma non possono essere perché non esiste un ragionevole riferimento comune tra i due tipi altrimenti non correlati.
assignable_from
richiede anche common_reference
...