https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68880
--- Comment #1 from François Dumont <fdumont at gcc dot gnu.org> --- Not sure it is a regression. Of course before the patch the operator was called in namespace std so your operator was considered. Now we are using intermediate functor that are not in std namespace so your operator is hidden to those functors. I don't think the Standard is saying that we should consider namespace std in this context. So your best choice is simply to put your operator in namespace N rather than polluting the std one. I hope someone with higher C++ Standard knowledge will confirm.