[Development] How to port from Q_FOREACH to range-based for

André Pönitz apoenitz at t-online.de
Tue Jun 11 21:51:24 CEST 2019


On Tue, Jun 11, 2019 at 08:47:12PM +0200, Mutz, Marc via Development wrote:
> On 2019-06-11 09:48, Lars Knoll wrote:
> > > On 11 Jun 2019, at 09:35, Olivier Goffart <olivier at woboq.com> wrote:
> > > 
> > > On 11.06.19 09:17, Lars Knoll wrote:
> > > > So, is removing it worth all the hassle to us and our users?
> > > > Q_FOREACH is a macro and it doesn’t really cost us anything to
> > > > keep it around. Yes, it has issues with non Qt containers and I
> > > > wouldn’t recommend it for any new code. But maybe we could
> > > > simply fix that part, but making Q_FOREACH emit a compiler
> > > > warning if used on a container that’s not implicitly shared?
> > > 
> > > +1
> > > Although we should probably still discourage its usage in the
> > > documentation.
> > > 
> > > Regarding the compiler warning:
> > >  https://codereview.qt-project.org/c/qt/qtbase/+/244010
> > > 
> > 
> > Nice. So doesn’t this solve most of the issues we have with Q_FOREACH
> > (maybe with the exception that some people find macros ugly)?
> 
> If you look at the git history, you will find that it's not at all
> maintenance-free code that just sits there. I just saw a C++17(!)-only code
> path there when I rebased my deprecation patch to current dev the other day.
> 
> There's also, as Peppe has repeatedly indicated (and never got a proper
> reply to) the teaching/documentation issue: as long as Q_FOREACH stays,
> undeprecated, we need to teach people about it: when to use and when not to
> use.
> That's usually 10min or so of an intro Qt course that could be better
> spent on teaching something more important.

It takes less 10 minutes to say "Use ranged for, but do not touch foreach
unless you know what you are doing".

The 10 minutes you could spend to add that to the docs.

> If Q_FOREACH is deprecated, we can drop the slides, and a good chunk of the
> docs.
> 
> This is a bit like the Fridays for Future generation clash: the new
> developer asks "why is there Q_FOREACH if there's ranged-for?" and the older
> devs answer: "because I wants my SUV, erhm, I mean Q_FOREACH".

Stop trolling.

Andre'



More information about the Development mailing list