与 CodeReview 上的这个问题相关,我尝试使用std::unordered_map
自定义分配器,但显然这不适用于 gcc/clang 和 libstdc++。可以通过使用std::allocator
#include <unordered_map>
int main()
{
typedef std::allocator<std::pair<const int, int>> A;
typedef std::unordered_map<int, int, std::hash<int>, std::equal_to<int>, A> H;
auto h = H{A()}; // ERROR, cannot find constructor H::H(const A&)
}
问题:libstdc++ 是否支持std::unordered_map
使用单个分配器作为参数进行构造不完整?
更新:进一步检查表明,对于除 之外的几乎所有容器std::vector
,libstdc++ 中分配器的使用直接访问 typedef 和分配器的成员函数,而不是通过std::allocator_traits
. 这适用std::allocator
于所有自定义分配器但失败,除非它们直接添加这些成员和 typedef。