Eric Niebler wrote:
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.
Apparently their position is that argument-dependent lookup should apply to names, just like ordinary lookup does. Sounds nice in theory, but brings no benefits and causes a lot of problems in practice. http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_active.html#218