Inspired in the following CppCoreGuidelines
ES.56: Write std::move() only when you need to explicitly move an object to another scope
F.19: For "forward" parameters, pass by TP&& and only std::forward the parameter