Both std::move and std::forward are template functions, why is it that we don't need to provide a template argument type for std::move but std::forward?
For example (from Effective Modern C++):
class Widget {
public:
Widget(Widget&& rhs)
: s(std::move(rhs.s)) {}
...
private:
std::string s;
};
class Widget {
public:
Widget(Widget&& rhs)
: s(std::forward<std::string>(rhs.s)) {}
...
};