[Toybox] ?: proposal for ISO C

Rob Landley rob at landley.net
Tue Jul 8 16:50:21 PDT 2025


On 7/8/25 15:44, Alejandro Colomar wrote:
> [CC += wg14]
> 
> Hi Elliott, Rob,
> 
> On Tue, Jul 08, 2025 at 03:32:37PM -0400, enh wrote:
>> On Tue, Jul 1, 2025 at 1:52 PM Rob Landley <rob at landley.net> wrote:
>>> I spent many years figuring out what I could throw away. That quote from
>>> the guy who wrote "The Little Prince" was my email sig for a while:
>>>
>>> https://www.goodreads.com/quotes/19905-perfection-is-achieved-not-when-there-is-nothing-more-to
> 
> [...]
> 
>>>>> it's been implemented by clang/gcc for a long time, but if you're
>>>>> going to be a standards lawyer about it, __has_include() is c++17 and
>>>>> c23.
>>>
>>> Sigh. Did one of the standards finally include gcc's empty ? : middle
>>> argument? (Which I use all the time...)
>>
>> c23 does not include this, and i don't think i've seen a proposal to
>> standardize it. +Alejandro Colomar pays more attention to wg14 though,
>> so he might know better...
>>
>>> Sadly, standards remain a frame of reference to diverge from...
> 
> I've written a proposal for standardization of that.  So far, I've only
> presented it informally (via email) to the committee, but I'll turn it
> into a proper paper after the next meeting that will be in August.
> 
> Here's my draft proposal:
> <https://www.alejandro-colomar.es/src/alx/alx/wg14/alx-0030.git/tree/alx-0030.txt>
> (Anyway, I've pasted it at the bottom of the email, for convenience.)
> 
> In August, we'll vote a proposal on which mine depends for the wording,
> which is why I didn't yet present an N document.
> 
> I've CCed the committee in this email, so that they see that people are
> interested in having this feature and use it all the time.
> 
> Feel free to comment on the proposal, if you think you'd add anything to
> the rationale.

Rationale? As in why I was surprised this wasn't in C11?

The linux 1.0 kernel circa 1994 used the ? : operator 4 times in 
fs/pipe.c (which is not optional, that's a core file part of all builds 
no matter the target or configuration). This stayed the only uses for 
1.2 and 2.0, but in 2.2 (1999) it expanded to 31 uses in multiple files.

When Intel extended its proprietary ICC to build Linux 2.4.21 (ala 
https://community.intel.com/legacyfs/online/drupal_files/article/146679/linuxkernelbuildwhitepaper.pdf) 
the ? : operator was one of the things they added support for (although 
the name "elvis operator" hadn't been coined yet, 
https://web.archive.org/web/20170830022856/https://software.intel.com/sites/default/files/m/d/4/1/d/8/Intel_Linux_Compiler_12_01_GNU_Compatibility_rev10.pdf 
called it "conditionals with omitted operands".)

When tinycc built a 2.4.26 kernel ala 
https://bellard.org/tcc/tccboot.html back in 2004 it also had to support 
empty "? :".

By the time Clang/LLVM built a Linux 2.6.36 in 2010 
(https://lwn.net/Articles/411654/) support for ? : was a well-known 
requirement for building Linux and linux programs like busybox (release 
1.2.2 in 2006 had 9 instances).

Even small compilers like libfirm/cparser support this (ala 
https://github.com/libfirm/cparser/commit/315d496108eb from 2007) and I 
just built a quick test program with the current 
https://github.com/PortableCC/pcc to confirm that supports it too 
(although the git repository history only goes back to 2002, beginning 
with a single "import" commit flattening the earlier history, so if 
there was a specific commit mentioning ? : in its description it was 
before then.) I believe that's the compiler that FreeBSD switched to 
clang from?

All of that predated C11. FreeBSD and MacOS support ? : just fine in a 
simple "cc hello.c" using the stock host $PATH, no homebrew required, no 
idea when they last _didn't_.

IBM's big iron tech all started soaking up serious linux-isms in 2001 
with Gerstner's "billion dollars a year on linux" announcement, long 
before they were reverse-acquired by Red Hat, and I believe this was one 
of them all the way back then. The OS/2 development staff consolidated 
from Boca Raton to Austin in 1996 became the core of the IBM Linux 
Technology Center 5 years later, AIX 5L was also 2001, Linas Vepstas' 
"bigfoot" port of Linux to the 360 was 1998 ala 
https://linas.org/linux/i370-why.html ...

As always, I have no idea what Windows is doing.

Rob

P.S. I don't know where the name "Elvis operator" came from. Page 11 of 
https://github.com/CppCon/CppCon2019/blob/master/Presentations/nonconforming_cpp/nonconforming_cpp__miro_knejp__cppcon_2019.pdf 
also calls it "conditionals with omitted operands", and 6 minutes into 
https://www.youtube.com/watch?v=IAdLwUXRUvg the guy giving that 
presentation calls it that and then boggles at the name "elvis 
operator". I think the email this is replying to is second time I've 
ever heard anyone call it that, and vaguely assumed it was some sort of 
pun on vi using colon commands a lot.


More information about the Toybox mailing list