"Eric Niebler"
Sounds like the problem is not in STL but in GCC's implementation of ADL, which is finding class names. In this case, the collision isn't in STL, it is a collision of end() from Boost.Range and end<> from MPL. Changing the STL implementation will *not* fix this problem. My understanding of ADL is that it should be used to locate *function* overloads. It is meaningless to find class names using ADL. Until gcc's rules for ADL are fixed, this problem will persist.
The GCC's ADL is sure broken, but this only shows up in combination with another problem -- unqualified calls. Just fixing ADL would not solve the problem -- MPL is free to have a *function* called end(). In this particular case the Boost.Range needs to be fixed to avoid unqualified calls, IMO. Besides it's definitely easier and faster than to wait until GCC ADL get fixed :-) Regards, Arkadiy.