Since this touches on a possible standards issue, CC'ing the standards list.

On 2015-07-21 13:00, Gunnar Roth wrote:
> Hello,
> Out of curiosity i just looked at the Xcode 6.4 headers for the 
> implementation of std::vector::emplace_back,
> and i don’t think there is any difference between 
> push_back(QPen(Qt::red,1.5f)) and emplace_back(Qt::red,1,5f))
> 
> The implementation is like this:
>     template <class... _Args>
>     _LIBCPP_INLINE_VISIBILITY void emplace_back(_Args&&... __args)
>         { push_back ( value_type ( _VSTD::forward<_Args>(__args)... )); }

From http://www.cplusplus.com/reference/vector/vector/emplace_back/:

  "Inserts a new element at the end of the vector, right after its
current last element. This new element *is constructed in place* using
args as the arguments for its constructor." (emphasis added)

From http://en.cppreference.com/w/cpp/container/vector/emplace_back:

  "Appends a new element to the end of the container. The element is
constructed through std::allocator_traits::construct, which typically
*uses placement-new to construct the element in-place* at the location
provided by the container." (emphasis added)

Ergo, that implementation looks... suspicious, and *may* even be
non-conforming. (Unless push_back is doing something really funky, which
I somewhat doubt.) You may want to file a bug against that implementation.

@std-discussion, since I don't have a copy of the standardese handy, is
in-place behavior (or possibly rather use of 'std::a_t::construct')
*required* for standards conformance, or is it just QoI? (Is there any
way that the above implementation can be doing in-place construction?)

-- 
Matthew

_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to