Das Konzeptequality_comparable_with<T, U> soll erklären, dass Objekte vom Typ Tund Umiteinander verglichen werden können, und wenn dies der Fall ist, hat dies die erwartete Bedeutung. Das ist gut.
Dieses Konzept muss common_reference_t<T&, U&>jedoch auch existieren. Der Hauptimpuls für common_referenceund die damit verbundene Funktionalität scheint darin zu bestehen, Proxy-Iteratoren zu ermöglichen , einen Platz zu haben, um die Beziehung zwischen referenceund value_typefür solche Iteratoren darzustellen .
Das ist großartig, aber ... was hat das mit dem Testen zu tun, ob a Tund a Ugleich miteinander verglichen werden können? Warum verlangt der Standard dies Tund Uhat eine gemeinsame Referenzbeziehung, damit Sie sie gleich vergleichen können?
Dies führt zu merkwürdigen Situationen, in denen es sehr schwierig ist, zwei Typen zu haben, die vernünftigerweise keine gemeinsame Referenzbeziehung haben, die logisch vergleichbar ist. Zum Beispiel vector<int>und sollte pmr::vector<int>logischerweise vergleichbar sein. Aber sie können nicht sein, weil es keinen vernünftigen gemeinsamen Bezug zwischen den beiden ansonsten nicht verwandten Typen gibt.
assignable_fromerfordert sogar common_reference...