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

Reply via email to