https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116876
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- EDG, GCC and MSVC all use the reference function rather const rvalue reference function. if we change the const rvalue reference to just an rvalue reference, then clang accepts it: > template< class T > void f( T&& ) { puts("rvalue-reference"); }; So are you sure this is not a clang issue?