On 2017-12-04 21:05, Ville Voutilainen wrote:
Same goes for semantics.

In fact, I'm _mainly_ concerned with semantics. Different method naming is trivially fixed by tooling these days, as long as the semantics are the same.

As a trivial example: qAsConst, like std::as_const, has the rvalue overload `= delete`d. For Qt containers, and most STL ones, too, with the notable exceptions of QVLA and std::array, it would make sense to allow the rvalue overload, but return a new object moved from the original. Then lifetime extension would kick in and

  for (auto &e : qAsConst(funReturningQVector()))

would be safe, albeit less efficient as the alternative. But getting rid of qAsConst would then be much harder, since std::as_const does not have an overload for rvalues, so the above code would need to be transformed into

  const auto uniq = funReturningQVector();
  for (auto &e : uniq)

which is what you're forced to write today already, thanks to the lack of the rvalue overload.

As an aside: it also makes the API easier to abuse (by allowing std::array and QVLA rvalues).

So, IMNSHO, it's better to not add the rvalue overload to qAsConst, but keep it `= delete`d, thereby maintaining semantic one-to-one-ness with std::as_const, in turn making tools to perform the rewrite trivial (in this case, as easy as `s/qAsConst/std::as_const/g`).

Thanks,
Marc

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

Reply via email to