> 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

Reply via email to