using Clang 3.9.1 on Ubuntu 14.04, I have trouble compiling with the checked STL version.
Error message:
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/debug/array:86:52:
error: too many arguments to function call, expected single argument '__other', have 2 arguments
The second, unqualified `swap` is envisioned to involve the Argument Dependent Lookup (ADL) and call whatever ADL finds, and if ADL fails to find (a most probably user-defined) one, call the one in `std`.
Here clang behaves as if the second `swap` is hidden by the first one being declared. This is the bug, because the exception specification is part of the function declarator and is before the point of declaration of the function being declared, and consequently, shall not make the name of the function in question visible.
The use of the qualified name `std::swap` prevents the second `swap` from being hidden as described above, but it also forbids ADL so user-defined `swap` functions cannot be found at all. This is a minor issue if you have had move assignment operators implemented properly, nevertheless.