https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106223
--- Comment #7 from Nimrod <nimrodcowboy at gmail dot com> --- (In reply to Jonathan Wakely from comment #5) > That paragraph has nothing to do with your case, you are adding a > specialization, not an explicit instantiation. Sorry, I quoted the wrong paragraph. It should be https://timsong-cpp.github.io/cppwp/n4659/namespace.std#2 "A program may add a template specialization for any standard library template to namespace std only if the declaration depends on a user-defined type and the specialization meets the standard library requirements for the original template and is not explicitly prohibited" > If the standard allows this nonsense then it needs to be fixed. std::move > and std::forward are effectively built-in language primitives, and you > should not be messing with them. Basically agreed and I think it's fixed in C++20. So I'm talking about C++17 things.