Я так и сделал и все понял. std::forward нужен, чтоб после того как по универсальной ссылке пришло значение rvalue оно опять передалось как rvalue дальше во внутренюю функцию, а l value как lvalue. Без std::forward все что приходит по универсальной ссылке автоматом становится как lvalue , и передается дальше во внутреннюю функцию как lvalue (даже если пришло на вход внешней функции как rvalue).