Motivation: LLVM has many overloads of std::swap for its own types. This is technically forbidden by the standard, but is pervasive in the LLVM code base. The correct fix for this is to put them in the same namespace as the thing that they are swapping - but do do this, we have to find (and fix) all the places where we call std::swap explicitly, and let ADL do the finding instead.
The basic transform is:
std::swap(x, y) --> { using std::swap; swap(x, y); }
It would be better if the checking for builtin types and pointers were in the matcher instead of the code.
Thanks to Manuel and Aaron for helping with this
Can this FIXME be fixed? ;-)