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 _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
