Я видел возможные реализации для std::remove_reference ниже:
template< class T > struct remove_reference {typedef T type;};
template< class T > struct remove_reference<T&> {typedef T type;};
template< class T > struct remove_reference<T&&> {typedef T type;};
Почему существует специализация для lvalue и rvalue reference? не будет ли общий шаблон сам по себе достаточным и удалить ссылку? Я запутался здесь, потому что в T& или T&& специализации, если я пытаюсь использовать ::type, мне все равно нужно получить T& или T&& соответственно?
Не могли бы вы объяснить, как, почему мы переходим к remove_reference<t>::type&& в движении? (это потому, что этот параметр назван так, что он будет рассматриваться как lvalue внутри функции перемещения?).
Также вы могли бы указать способ, с помощью которого я могу узнать и распечатать, что такое тип? например, если его rvalue типа int, то я должен иметь возможность распечатать, что int&& был передан? (Я использовал std::is_same для проверки, но вручную.)
Спасибо за ваше время.