> Am 21.07.2015 um 20:11 schrieb Bubke Marco <[email protected]>: > > > Gunnar Roth <[email protected]> >>> >>> void push_back(T &&t) { >>> ensureCapacity(size() + 1); >>> new (m_end) T(std::move(t)); // move-construct from t >>> ++m_end; >> why is std::move needed here? Afaik std::move(t) converts t into a rvalue >> ref, but t is already an r-value ref. > > If T would be not a template t is binding to a rvalue reference but it is not > itself a rvalue reference but an lvalue. > If T is a template like in this case it is more complicated because it is a > universal or forward reference. For a > forward reference it could be an lvalue reference like (T&) or a lvalue(T) > depending as the argument is a rvalue, > lvalue or lvalue reference. > T&& -> T > T& -> T& > T -> T > > std::forward would be of better use than std::move: > http://en.cppreference.com/w/cpp/utility/forward >
Well std::forward is the right thing to do here not std::move ( std::move just does accidentally the same. the forward is needed because of the way T is deduced from the passed parameter. Regards, Gunnar Roth _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
