Các khái niệmequality_comparable_with<T, U>
được thiết kế để tuyên bố rằng đối tượng của loại hình T
và U
có thể so sánh tương đương với nhau, và nếu họ đang có, thì đây có ý nghĩa mong đợi. Tốt rồi.
Tuy nhiên, khái niệm này cũng đòi hỏi common_reference_t<T&, U&>
phải tồn tại. Động lực chính cho common_reference
và chức năng tiếp viên của nó dường như là cho phép các trình vòng lặp proxy , để có một vị trí để thể hiện mối quan hệ giữa reference
và value_type
cho các trình vòng lặp như vậy.
Điều đó thật tuyệt, nhưng ... điều đó có liên quan gì đến việc kiểm tra nếu a T
và a U
có thể được so sánh bằng nhau? Tại sao tiêu chuẩn yêu cầu điều đó T
và U
có mối quan hệ tham chiếu chung chỉ để cho phép bạn so sánh chúng bằng nhau?
Điều này tạo ra các tình huống kỳ quặc trong đó rất khó có hai loại không có mối quan hệ tham chiếu chung có thể so sánh một cách hợp lý. Ví dụ, vector<int>
và pmr::vector<int>
logic phải được so sánh. Nhưng chúng không thể là do không có tham chiếu chung hợp lý giữa hai loại không liên quan.
assignable_from
yêu cầu common_reference
...