On 10/29/18 4:56 PM, Thiago Macieira wrote:
2) it's implemented by way of a for loop inside a for loop, which is known
to throw optimisers out, generating slightly worse code

I would consider that the missed optimization is quite small, if not
negligible. And it can be solved in C++17:
https://codereview.qt-project.org/243984/

I'd solve this the other way around, by making the macro:

     if (const auto &_container_ = (container); true) \
         for (variable : _container_)

This creates a scope-only const reference to the original container and then
uses the ranged for on it.

That does not work, because foreach need to support a variable which is already declare: "QString str; foreach (str, list)" (see the documentation http://doc.qt.io/qt-5/containers.html#foreach ), and this construct is not allowed in a ranged-based for.

Othewise, we could have that in C++11:

    for (variable : qMakeForeachContainer(container))

We should be able to depend on this for Qt 6.4 or something.

I tought Qt6 would probably require C++17. But even if one does not, it's completely optional.

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

Reply via email to