【发布时间】:2011-10-15 18:46:37
【问题描述】:
在 VS2010 中 std::forward 是这样定义的:
template<class _Ty> inline
_Ty&& forward(typename identity<_Ty>::type& _Arg)
{ // forward _Arg, given explicitly specified type parameter
return ((_Ty&&)_Arg);
}
identity 似乎仅用于禁用模板参数推导。在这种情况下故意禁用它有什么意义?
【问题讨论】:
-
请注意,当前
std::forward被声明为template<typename T> T&& forward(typename std::remove_reference<T>::type& t); template<typename T> T&& forward(typename std::remove_reference<T>::type&& t);(并且都返回static_cast<T&&>(t))。 MSVC 正在关注forward的早期版本。 -
有趣。这与
template<typename T> T&& forward(T&& t){ return static_cast<T&&>(t); }有何不同?我在std::move中看到了std::remove_reference的用途,但这里没有。 -
两个重载版本适用于右值,不需要
std:identity,这实际上是完全来自标准的dropper。
标签: c++ visual-studio-2010 stl c++11