在STL容器的模板参数中,使用不匹配的std::allocator
特化(当然,除了针对void
的特化)在技术上是否有效?以下代码可以编译通过,但只适用于下列枚举的容器:unordered_(multi)map/set。
#include <list>
#include <forward_list>
#include <deque>
#include <set>
#include <map>
int main()
{
struct A { bool operator < (A) const { return true; } };
struct B {};
struct C {};
std::list< A, std::allocator< C > > l;
std::forward_list< A, std::allocator< C > > fl;
std::deque< A, std::allocator< C > > d;
std::set< A, std::less< A >, std::allocator< C > > s;
std::multiset< A, std::less< A >, std::allocator< C > > ms;
std::map< A, B, std::less< A >, std::allocator< C > > m;
std::multimap< A, B, std::less< A >, std::allocator< C > > mm;
}
我认为这是由于分配器立即重新绑定到底层节点类型而与其源类型无关。