Технических проблем нет. Это, конечно, тривиально реализовать:
template <std::equality_comparable T, typename A1, typename A2>
bool operator==(std::vector<T, A1> const& lhs, std::vector<T, A2> const& rhs) {
return std::equal(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
}
И тогда зачем останавливаться на распределителях? Почему я не могу сравнить vector<int>
с vector<long>
?
P0805 - предложение по расширению набора для сравнения, позволяющего сравнивать контейнеры как смешанного типа, так и смешанного распределителя. Он был одобрен для C ++ 20, но не сделал разрез, и все еще нуждается в некоторой работе, чтобы соответствовать новым концепциям C ++ 20 (в частности, equality_comparable_with
требует common_reference
: какова общая ссылка между двумя vector
с разными распределителями?)
Между тем, std::ranges::equal(v1, v2)
работает для гетерогенных векторов.