Is remove_rvalue_reference needed? I think std::remove_reference would suffice, it removes l-value references and r-value references. http://www.cplusplus.com/reference/type_traits/remove_reference/