Я видел возможные реализации для 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
для проверки, но вручную.)
Спасибо за ваше время.