http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47433
--- Comment #7 from Paolo Carlini <paolo.carlini at oracle dot com> 2011-01-24 13:28:28 UTC --- For sure if we are swapping _Tps we have to omit the std::. In general, when we are not swapping built-ins or pointers we have to omit the qualification or use something else, like std::swap_ranges (which eventually calls unqualified swap anyway). Please let me know which are your plans Johannes and let's resolve this issue of 4.6.0, we don't have much time...