https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67796
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- This (invalid) program prints "ADL Works!" as expected, so without a proper testcase (as required by https://gcc.gnu.org/bugs/ anyway) we have no idea what your actual code does: #include <tuple> #include <iostream> namespace std { template <typename... T> void swap(std::tuple<T&...> lhs, std::tuple<T&...> rhs) noexcept { std::cout<<"ADL works!"<<std::endl; std::tuple<T...> tmp = lhs; lhs = rhs; rhs = tmp; } } int main() { int i = 0; std::tuple<int&> t{i}; swap(t, t); }