https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78231
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- See 17.6.3.2 [swappable.requirements]. ValueSwappable is defined in terms of swappable, which is defined in terms of swappable with, which is defined in terms of an unqualified call to swap. It has nothing to do with std::iter_swap. This is a special rule for "swap" that doesn't apply to other functions. 17.6.1.1 [contents] says all references to iter_swap in the Standard Library refer to ::std::iter_swap, i.e. any function specified to call iter_swap must call ::std::iter_swap not some other function found by ADL.