https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118365
Bug ID: 118365 Summary: try to define an overloaded function template for a namespace, without having first declared it in that namespace Product: gcc Version: 14.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ing.russomauro at gmail dot com Target Milestone: --- This bug comes from a wrong implementation of the swap idiom, where I was trying to define an overload of std::swap. The code is correctly rejected by clang and MVSC, it uses concepts but I guess simpler cases may be constructed: https://godbolt.org/z/TvqK7Kv4z #include <algorithm> #include <iostream> #include <utility> template<class T> concept C = requires (T a){a.x;}; template<C T> void std::swap(T& lhs, T& rhs) { std::cout << "overloaded swap\n"; } struct S{ int x; }; int main(){ S a, b; std::swap(a,b); }