Подумайте, что произойдет, если T
является ссылкой на lvalue, например MyClass &
. В этом случае T &&
станет MyClass & &&
, и из-за правил свертывания ссылок это будет преобразовано в MyClass &
снова. Чтобы получить правильный результат, typename remove_reference<MyClass&>::type&&
сначала удаляет любые ссылочные декорации из типа, поэтому MyClass &
сопоставляется с MyClass
, а затем к нему применяется ссылка rvalue, в результате получается MyClass &&
.