The STL allocators require this constructor form (20.1.5): X a(b);
with the requirement that Y(a) == b;
In the standard implementation this implies, and is implemented as:
template<class U> allocator( const allocator<U> & o ) throw()
I'm having trouble understanding why this requirement exists. I understand that allocators should be static (not have any state), but why on earth should you be able to convert them like this?