C++ 在C++;20 std::vector运算符==不适用于具有不同分配器的向量?

C++ 在C++;20 std::vector运算符==不适用于具有不同分配器的向量?,c++,c++20,allocator,c++-concepts,C++,C++20,Allocator,C++ Concepts,注: 我知道通常的原因是可能的:没有人想到它/写过论文/WG21不认为它值得付出努力,我更感兴趣的是阻止潜在实现的技术问题,而不是这个功能的实用价值 我总是觉得这样做很奇怪(甚至在概念出现之前,因为我们可以使用enable_if) #包括 #包括 int main() { std::向量a{1,2,3}; std::向量b{1,2,3}; 返回a==b; } 原因是分配器不会影响存储在容器中的值(我知道值可能使用运算符==中的地址,我指的是“正常”类型) 所以我的问题是: 如果我们想用C++2

注:

我知道通常的原因是可能的:没有人想到它/写过论文/WG21不认为它值得付出努力,我更感兴趣的是阻止潜在实现的技术问题,而不是这个功能的实用价值

我总是觉得这样做很奇怪(甚至在概念出现之前,因为我们可以使用enable_if)

#包括
#包括
int main()
{
std::向量a{1,2,3};
std::向量b{1,2,3};
返回a==b;
}
原因是分配器不会影响存储在容器中的值(我知道值可能使用运算符==中的地址,我指的是“正常”类型)

所以我的问题是:
如果我们想用C++20的概念来实现它,我们可以在不破坏任何现有代码的情况下引入此功能吗?

没有任何技术问题。这当然是微不足道的:

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());
}
模板
布尔运算符==(标准::向量常量和lhs,标准::向量常量和rhs){
返回std::equal(lhs.begin(),lhs.end(),rhs.begin(),rhs.end());
}
那么为什么要停在分配器上呢?为什么我不能将
向量
向量
进行比较

是扩大比较集以允许比较混合类型和混合分配器容器的建议。它被批准用于C++20,但没有被削减,仍然需要一些工作来适应新的C++20概念(值得注意的是,
equality\u compariable\u与
requires
common\u reference
:具有不同分配器的两个
向量之间的公共引用是什么?)



同时, STD::Lime::Value:V/P> >代码> > siz()= .b siz()和STD::(AcCnEnter),AcCd(,()(B.cRead))@ @ SeuliPbPADDEUX实际上C++现在有4个ITER版本相等,但是是的,我知道我可以使用STD::我只是想知道==很好的答案,论文也很好,但就比较不同大小的std::数组而言,我不同意P0805,这对我来说似乎非常容易出错。
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());
}