http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60448
--- Comment #8 from Alisdair Meredith <public at alisdairm dot net> --- I agree with Mark's analysis. I was trying to force use of swap on a local class, and found a pattern that worked for libc++ but missed that neither template would be more specialized - my original attempt used friends ands not valid for other reasons. The key is that libc++ SFINAEs swap on the type requirements, while libstdc++ defers the error until swap is instantiated. I am still surprised that I get an error for calling the move operations of 'local' though (in the second example) rather than getting an ambiguous lookup. I think the first example is unambiguously a user-error (mine) by this analysis.