我正在阅读cppreference中的std::forward
条目。
对于std::forward
的第二次重载,有一个例子:
template<class T> void wrapper(T&& arg) { foo(forward<decltype(forward<T>(arg).get())>(forward<T>(arg).get())); }
arg
的类型可能是struct Arg { int i = 1; int get() && { return i; } // call to this overload is rvalue int& get() & { return i; } // call to this overload is lvalue };
但是forward<T>(arg).get()
是左值还是右值可以在不使用std::forward
的情况下进行区分(如果引用wrapper
的{{1}}的参数是左值,{{1}是左值;否则是右值)。以下程序是一个支持:
arg
那么外部forward<T>(arg).get()
的用途是什么?