[Development] A modest proposal: disable lower-case keywords (emit, foreach, forever, signals, slots) by default

Nathan Myers ncm at cantrip.org
Mon Apr 13 05:09:20 CEST 2020


  On Fri, Feb 21, 2020 at 11:03:19PM +0200, Ville Voutilainen wrote:
 > On Fri, 21 Feb 2020 at 22:11, André Pönitz <apoenitz at t-online.de> 
 > > wrote:
 > > This sounds a bit like the committee shot down the proposal to
 > > not use 'emit' without even bothering to think about reasons why
 > > there are users of this "nonsense", let alone tried to ask them.
 >
 > The committee shot down the proposal because
 > 1) there are work-arounds to the problem, and we already use those
 > work-arounds for similar
 > issues with boost::signal
 > 2) trying to avoid clashes with lowercase non-function-like macros is
 > rather difficult
 > 3) the scope of the problem is narrow
 > 4) no existing code is broken

Ville is demonstrating extreme courtesy, here, possibly to
the detriment of the presentation of factual history.

The prevailing feeling in the room, when the vote was taken,
was that Qt people  MUST  BE  SMOKING  CRACK  if they think
the ISO 14882 C++ Standard should or would tiptoe around Qt's
aggressive abuse of lower-case macro names. That Qt has abused
them for a long time makes the abuse exactly that much *less*
excusable. To wit: you cannot claim you didn't know better.

It would not be at all surprising if uses of all the other
abused names--signals, slots, etc--show up in key components
of C++23. Asking the committee to change them could not
reasonably be expected to produce a peaceful outcome.

Marc's proposal is far too modest. Just change the default,
in a single step: eliminate the abusive macros, as any
responsible organization would have done *decades* ago.
(An accompanying apology for past abuse would not be out of
place.) Anybody who wants to keep using the abusive macros
already knows how. They will also know that they are
deliberately choosing to do The Wrong Thing.

Nathan Myers


More information about the Development mailing list