<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>kojobailey.me</title><link>https://kojobailey.me/</link><description>Recent content on kojobailey.me</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sat, 21 Mar 2026 16:58:00 +0000</lastBuildDate><atom:link href="https://kojobailey.me/feed.xml" rel="self" type="application/rss+xml"/><item><title>Compile-Time Embedding with #include</title><link>https://kojobailey.me/posts/cpp-comptime-embedding/</link><pubDate>Sat, 21 Mar 2026 16:58:00 +0000</pubDate><guid>https://kojobailey.me/posts/cpp-comptime-embedding/</guid><description>&lt;p>Although executing code at &lt;strong>compile-time&lt;/strong> is not a new idea by any means, the &lt;a href="https://ziglang.org"
target="_blank" rel="noopener noreferrer"
>Zig&lt;/a>
programming language popularised the term &lt;strong>&lt;a href="https://zig.guide/language-basics/comptime/"
target="_blank" rel="noopener noreferrer"
>comptime&lt;/a>
&lt;/strong>, and has brought a lot of eyes back on the topic by making it easier to use than in other languages.&lt;/p>
&lt;p>I personally haven&amp;rsquo;t taken the time to dabble in Zig yet - I&amp;rsquo;m already busy with &lt;a href="https://github.com/KojoBailey/japi-merging-rs"
target="_blank" rel="noopener noreferrer"
>Rust&lt;/a>
and &lt;a href="https://github.com/KojoBailey/cli-calculator-ocaml"
target="_blank" rel="noopener noreferrer"
>OCaml&lt;/a>
- but curious as I am, I particularly wanted to know if &lt;strong>files&lt;/strong> could be accessed at compile-time in the language I still know best: &lt;strong>C++&lt;/strong>.&lt;/p></description><content:encoded><![CDATA[<p>Although executing code at <strong>compile-time</strong> is not a new idea by any means, the <a href="https://ziglang.org"
	
		target="_blank" rel="noopener noreferrer"
	>Zig</a>
 programming language popularised the term <strong><a href="https://zig.guide/language-basics/comptime/"
	
		target="_blank" rel="noopener noreferrer"
	>comptime</a>
</strong>, and has brought a lot of eyes back on the topic by making it easier to use than in other languages.</p>
<p>I personally haven&rsquo;t taken the time to dabble in Zig yet - I&rsquo;m already busy with <a href="https://github.com/KojoBailey/japi-merging-rs"
	
		target="_blank" rel="noopener noreferrer"
	>Rust</a>
 and <a href="https://github.com/KojoBailey/cli-calculator-ocaml"
	
		target="_blank" rel="noopener noreferrer"
	>OCaml</a>
 - but curious as I am, I particularly wanted to know if <strong>files</strong> could be accessed at compile-time in the language I still know best: <strong>C++</strong>.</p>
<p>Turns out, the answer is&hellip; yes! Although, surprising to me, it&rsquo;s not through some <code>constexpr</code> version of <code>std::ifstream</code>.</p>
<h2 id="some-context">Some Context</h2>
<p>Instead, we can turn to a new feature in <a href="https://en.cppreference.com/w/c/23.html"
	
		target="_blank" rel="noopener noreferrer"
	>C23</a>
 <em>and</em> <a href="https://en.cppreference.com/w/cpp/26.html"
	
		target="_blank" rel="noopener noreferrer"
	>C++26</a>
: the <a href="https://en.cppreference.com/w/c/preprocessor/embed"
	
		target="_blank" rel="noopener noreferrer"
	><code>#embed</code></a>
 preprocessor directive. It allows file data to be embedded into a program at compile-time like so:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">constexpr</span> <span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">foo</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="cp">#embed &#34;foo.dat&#34;
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="p">};</span>
</span></span></code></pre></div><p>and even allows data to be read directly into structs!</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">struct</span> <span class="nc">T</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">struct</span> <span class="p">{</span> <span class="kt">double</span> <span class="n">e</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">g</span><span class="p">;</span> <span class="p">}</span> <span class="n">x</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">h</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="n">T</span> <span class="n">x</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="c1">// well-formed if the directive produces nine or fewer values
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="cp">#embed &#34;s.dat&#34;
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="p">};</span>
</span></span></code></pre></div><p>There are also optional <a href="https://en.cppreference.com/w/cpp/preprocessor/embed.html#Embed_parameters"
	
		target="_blank" rel="noopener noreferrer"
	>embed parameters</a>
 for even more power; and all-in-all, this is a welcome alternative to encoding file data into scripts manually. Plus, it better allows compilers to make optimisations!</p>
<p>However, although <code>#embed</code> is a nice solution to embedding files for the timebeing, it is still a <strong>preprocessor</strong>, which we in C++ would rather avoid.</p>
<p>The &ldquo;proper&rdquo; C++ alternative is proposed via <a href="https://thephd.dev/_vendor/future_cxx/papers/d1040.html"
	
		target="_blank" rel="noopener noreferrer"
	><code>std::embed</code></a>
 by the same author of <code>#embed</code>, <a href="https://thephd.dev/about/"
	
		target="_blank" rel="noopener noreferrer"
	>JeanHeyd Meneide</a>
, and was actually first proposed <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1040r0.html"
	
		target="_blank" rel="noopener noreferrer"
	>back in 2018</a>
 - although perhaps this shouldn&rsquo;t come as a surprise considering C++ is far from the easiest language to design and implement new features for.</p>
<p>Although there&rsquo;s a lot more to be said about these features, I want to focus this article on something&hellip; a bit less useful (obsolete even) - another, rather fun way to embed data. A method <em>without</em> <code>#embed</code>, <code>std::embed</code>, special conversion tools, or manually copying bytes by hand!</p>
<h2 id="the-power-of-the-preprocessor">The Power of the Preprocessor</h2>
<p>The <a href="https://en.cppreference.com/w/cpp/preprocessor/include.html"
	
		target="_blank" rel="noopener noreferrer"
	><code>#include</code></a>
 preprocessor is a relic of C&rsquo;s past that C++ is only recently beginning to escape from, with popular compilers slowly but surely implementing C++20&rsquo;s new <a href="https://en.cppreference.com/w/cpp/language/modules.html"
	
		target="_blank" rel="noopener noreferrer"
	>modules</a>
 system. After all C&rsquo;s old include system is widely considered to be glorified copy-paste, leaving C++ programmers to struggle with header guards, namespaces, and build times manually.</p>
<p>However, because <code>#include</code> effectively just copies a file&rsquo;s contents directly into a C++ file - regardless of the file&rsquo;s type - we can exploit this to load more than just header files, and at compile-time!</p>
<p>But there is an obvious drawback: the content that is pasted into our C++ script has to be valid C++ code. Therefore, a reliable way to have this work for any arbitrary data is to include it as a C++ string literal. This is because C strings are nothing more than <code>char</code> arrays, where each <code>char</code> represents a single byte, thus acting as a suitable container for binary-encoded data.</p>
<p>For instance, the following program encodes some binary data:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;cstdint&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="k">constexpr</span> <span class="k">const</span> <span class="kt">char</span> <span class="n">data</span><span class="p">[]</span> <span class="o">=</span> <span class="s">&#34;</span><span class="se">\x64\0\0\0\0\0\x20\x40\x31\x6A\x6E\x74\x30\x31\0\0</span><span class="s">&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">struct</span> <span class="nc">Character</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="kt">uint32_t</span> <span class="n">hp</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">float</span> <span class="n">speed</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="n">id</span><span class="p">[</span><span class="mi">8</span><span class="p">];</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// Assume little endian.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="n">Character</span> <span class="n">character</span> <span class="o">=</span> <span class="o">*</span><span class="k">reinterpret_cast</span><span class="o">&lt;</span><span class="k">const</span> <span class="n">Character</span><span class="o">*&gt;</span><span class="p">(</span><span class="n">data</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="s">&#34;Character ID: &#34;</span>    <span class="o">&lt;&lt;</span> <span class="n">character</span><span class="p">.</span><span class="n">id</span>    <span class="o">&lt;&lt;</span> <span class="s">&#34;</span><span class="se">\n</span><span class="s">&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="s">&#34;Character HP: &#34;</span>    <span class="o">&lt;&lt;</span> <span class="n">character</span><span class="p">.</span><span class="n">hp</span>    <span class="o">&lt;&lt;</span> <span class="s">&#34;</span><span class="se">\n</span><span class="s">&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="s">&#34;Character Speed: &#34;</span> <span class="o">&lt;&lt;</span> <span class="n">character</span><span class="p">.</span><span class="n">speed</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><div class="godbolt-button">
	<a target="_blank" href="https://godbolt.org/z/jGMxsvxqY">Run this code!</a>
</div>

<p><strong>Expected output:</strong></p>
<pre tabindex="0"><code>Character ID: 1jnt01
Character HP: 100
Character Speed: 2.5
</code></pre><p>So, seeing as that works, let&rsquo;s <code>#include</code> a file in place of the string:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">constexpr</span> <span class="k">const</span> <span class="kt">char</span> <span class="n">data</span><span class="p">[]</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">    <span class="cp">#include</span> <span class="cpf">&#34;1jnt01.bin&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="p">;</span>
</span></span></code></pre></div><p>Fairly straightforward, although because there is no way (that I could find, anyway) to wrap the include in a string from the C++ file itself, we need to add it to the binary file directly. As a result, it&rsquo;s important we format the data as a <strong>raw string literal</strong>, since then we don&rsquo;t need to worry about random <code>&quot;</code> characters in the middle of the data breaking our string.</p>
<p>More specifically, we should use a prefix that is highly unlikely to show up randomly elsewhere in the data, like <code>R&quot;CEmbd(</code>. Notice that this is also 8 characters/bytes long, which is because we should maintain 64-bit alignment. This in turn gives a suffix of 7 bytes, <code>)CEmbd&quot;</code>, for a total of 15 bytes of boilerplate - not particularly expensive.</p>
<p>To better illustrate what I&rsquo;m on about, let&rsquo;s construct a simple example with a file <code>hello.bin</code> that contains the following content:</p>
<pre tabindex="0"><code>R&#34;CEmbd(Hello, &#34;world&#34;!)CEmbd&#34;
</code></pre><p>which we include in a program like so:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">constexpr</span> <span class="k">const</span> <span class="kt">char</span> <span class="n">data</span><span class="p">[]</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">    <span class="cp">#include</span> <span class="cpf">&#34;hello.bin&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="p">;</span>
</span></span></code></pre></div><p>which, after the preprocessor includes the file, will result in:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">constexpr</span> <span class="k">const</span> <span class="kt">char</span> <span class="n">data</span><span class="p">[]</span> <span class="o">=</span>
</span></span><span class="line"><span class="cl">    <span class="n">R</span><span class="s">&#34;CEmbd(Hello, &#34;</span><span class="n">world</span><span class="s">&#34;!)CEmbd&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">;</span>
</span></span></code></pre></div><p>which is equivalent to:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">constexpr</span> <span class="k">const</span> <span class="kt">char</span> <span class="n">data</span><span class="p">[]</span> <span class="o">=</span> <span class="s">&#34;Hello, </span><span class="se">\&#34;</span><span class="s">world</span><span class="se">\&#34;</span><span class="s">!&#34;</span><span class="p">;</span>
</span></span></code></pre></div><p>And that&rsquo;s it! We have successfully embedded data from a non-C++ file into our C++ code. This method should work for any binary data that includes the proper raw string wrapping, whether edited to include it or designed as some kind of special data format (wouldn&rsquo;t that be interesting!).</p>
<p>If you want to see a more practical example (with better visual aid), then feel free to check out this video:</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/LZXAx-s42PE?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<h2 id="why">Why?</h2>
<p><code>#embed</code> is already making its way into C++26, and <code>std::embed</code> may eventually be added as well, rendering this method as obsolete for anyone on the latest standard. Not to mention, the major drawback of using <code>#include</code> to embed is that you&rsquo;d need to edit existing files to add the raw string wrapper.</p>
<p>That being said, for anyone on a version before C++26 who doesn&rsquo;t want to have to convert their file to C++ source code every time they swap or edit it, this is one such solution. And don&rsquo;t get me wrong - this isn&rsquo;t some revolutionary discovery. I wouldn&rsquo;t be surprised if some developer somewhere at some point in history has ended up genuinely making use of this hack because of their needs. Nevertheless, for developers that do have access to <code>#embed</code>, it is clearly the better option. Ergonomics aside, the additional performance benefits make it a true no-brainer.</p>
<p>Nevertheless, this was as interesting idea to test out, and I&rsquo;m honestly surprised it worked so smoothly in the first place. C++ is full of strange features (I imagine largely unintentionally so) and it&rsquo;s fun to see how they can be used in creative, sometimes mildly useful ways. With more compile-time features coming soon<sup>TM</sup> to C++, including <strong>reflection</strong>, I very much look forward to seeing what else becomes possible!</p>
]]></content:encoded></item><item><title>Perfectly Readable C++</title><link>https://kojobailey.me/posts/perfectly-readable-cpp/</link><pubDate>Mon, 02 Mar 2026 21:07:00 +0000</pubDate><guid>https://kojobailey.me/posts/perfectly-readable-cpp/</guid><description>&lt;p>&lt;a href="https://en.wikipedia.org/wiki/C%2B%2B"
target="_blank" rel="noopener noreferrer"
>C++&lt;/a>
is full of weird features, quirks, and historical artefacts. This is in part due to its aim to have classic &lt;a href="https://en.wikipedia.org/wiki/C_%28programming_language%29"
target="_blank" rel="noopener noreferrer"
>C&lt;/a>
code be valid under the C++ standard from day one. It is also due to the fact that C++ was &lt;a href="https://en.cppreference.com/w/cpp/language/history.html"
target="_blank" rel="noopener noreferrer"
>first published in 1985&lt;/a>
, and has naturally been filled with all sorts of features, good and bad, over the past 40+ years.&lt;/p>
&lt;p>As someone interested in programming language design, I&amp;rsquo;ve taken an interest in some of these features, eager to see just how hilariously difficult to read C++ code can be.&lt;/p></description><content:encoded><![CDATA[<p><a href="https://en.wikipedia.org/wiki/C%2B%2B"
	
		target="_blank" rel="noopener noreferrer"
	>C++</a>
 is full of weird features, quirks, and historical artefacts. This is in part due to its aim to have classic <a href="https://en.wikipedia.org/wiki/C_%28programming_language%29"
	
		target="_blank" rel="noopener noreferrer"
	>C</a>
 code be valid under the C++ standard from day one. It is also due to the fact that C++ was <a href="https://en.cppreference.com/w/cpp/language/history.html"
	
		target="_blank" rel="noopener noreferrer"
	>first published in 1985</a>
, and has naturally been filled with all sorts of features, good and bad, over the past 40+ years.</p>
<p>As someone interested in programming language design, I&rsquo;ve taken an interest in some of these features, eager to see just how hilariously difficult to read C++ code can be.</p>
<p>In this article, I intend to showcase some of these features in action, and so I present you with the following:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="o">%:</span><span class="n">import</span> <span class="s">&#34;bits/stdc++.h&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">main</span><span class="p">(</span><span class="k">register</span> <span class="kt">int</span><span class="p">(</span><span class="n">C</span><span class="p">),</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span><span class="p">(</span><span class="n">_</span><span class="p">)</span><span class="o">&lt;::&gt;</span><span class="p">)</span> <span class="k">noexcept</span> <span class="o">-&gt;</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">C</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="o">&lt;:</span><span class="nl">_</span><span class="p">:</span><span class="o">&gt;</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">_</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="o">&lt;%</span><span class="n">C</span><span class="o">++%&gt;</span><span class="p">,</span> <span class="n">not</span> <span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><div class="godbolt-button">
	<a target="_blank" href="https://godbolt.org/z/M8aWz1raE">Run this code!</a>
</div>

<p>I wrote this code while playing around with <a href="https://compiler.gg"
	
		target="_blank" rel="noopener noreferrer"
	>compiler.gg</a>
 which uses <a href="https://godbolt.org"
	
		target="_blank" rel="noopener noreferrer"
	>Godbolt&rsquo;s Compiler Explorer</a>
. It is intended to be compiled in that environment, so if you want to test it yourself, do so via <a href="https://godbolt.org/clientstate/eyJzZXNzaW9ucyI6W3siaWQiOjAsImxhbmd1YWdlIjoiYysrIiwic291cmNlIjoiJTppbXBvcnQgXCJpb3N0cmVhbVwiXG5hdXRvIG1haW4ocmVnaXN0ZXIgaW50KEMpLCBjb25zdCBjaGFyKihfKTw6Oj4pIG5vZXhjZXB0IC0&#43;IGludCB7XG4gIHJldHVybiBvcGVyYXRvcjw8KHN0ZDo6d2Nsb2csICooQyBePSAwNzQxNDQsIE5VTEw8Ol86PiArIDkpKVxuICAgIDw8ICh0eXBlb2YoKl8pKW5ldyB2b2xhdGlsZSBjb25zdCBzaWduZWQgbG9uZyBsb25nPCVDKyslPiwgbm90IHRydWU7XG59XG4iLCJjb21waWxlcnMiOlt7ImlkIjoiZzE1MiIsIm9wdGlvbnMiOiIifV0sImV4ZWN1dG9ycyI6W3siYXJndW1lbnRzIjoiIiwiY29tcGlsZXIiOnsiaWQiOiJnMTUyIiwibGlicyI6W10sIm9wdGlvbnMiOiIifSwic3RkaW4iOiIifV19XX0="
	
		target="_blank" rel="noopener noreferrer"
	>this link</a>
 with the &ldquo;x86-64 gcc 15.2&rdquo; compiler option.</p>
<p>Now, what this code does is simple: It outputs &ldquo;sex&rdquo; to the console.</p>
<p>How it goes about it&hellip; is less simple, and is what I will attempt to explain in the rest of this article! As I do so though, I invite you to also try and figure things out yourself to test your understanding of C and C++!</p>
<h2 id="digraphs">Digraphs</h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/operator_alternative.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/operator_alternative.html</a>
</p></blockquote>
<p>Right away, we are met with this strange <code>%:</code> pair of symbols, and similar symbols like <code>&lt;: :&gt;</code> and <code>&lt;% %&gt;</code> can be seen later in the code as well.</p>
<p>Such symbols are called <strong>digraphs</strong> - as in &ldquo;double symbol&rdquo; - and act as alternative ways to write common symbols for keyboards/systems that do not support <a href="https://en.wikipedia.org/wiki/ASCII"
	
		target="_blank" rel="noopener noreferrer"
	>ASCII</a>
. In particular, this is to comply with the <a href="https://en.wikipedia.org/wiki/ISO/IEC_646"
	
		target="_blank" rel="noopener noreferrer"
	>ISO 646</a>
 7-bit character set, which lacks common symbols that you may be familiar with as a programmer.</p>
<p>C&rsquo;s digraphs include:</p>
<ul>
<li><code>%:</code> = <code>#</code></li>
<li><code>&lt;:</code> = <code>[</code></li>
<li><code>:&gt;</code> = <code>]</code></li>
<li><code>&lt;%</code> = <code>{</code></li>
<li><code>%&gt;</code> = <code>}</code></li>
</ul>
<p>Furthermore, rather than use a digraph for the not operator, <code>!</code>, C includes the <code>not</code> keyword, which can be see towards the end of this code in <code>not true</code>.</p>
<p>Replacing all these alternative representations with their &ldquo;normal&rdquo; ASCII counterparts already helps to make the code a lot more readable:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#import &#34;bits/stdc++.h&#34;
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="k">auto</span> <span class="nf">main</span><span class="p">(</span><span class="k">register</span> <span class="kt">int</span><span class="p">(</span><span class="n">C</span><span class="p">),</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span><span class="p">(</span><span class="n">_</span><span class="p">)[])</span> <span class="k">noexcept</span> <span class="o">-&gt;</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">C</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">_</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">_</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">C</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="bonus-trigraphs">Bonus: Trigraphs</h3>
<p>C++ also used to support <strong>trigraphs</strong> <a href="https://en.wikipedia.org/wiki/C%2B%2B17#Removed_features"
	
		target="_blank" rel="noopener noreferrer"
	>up until C++17</a>
. These functioned similar to digraphs, except were parsed before both comments and string literals, leading to some funky situations such as <code>&quot;Enter date ??/??/??&quot;</code> becoming <code>&quot;Enter date \\??&quot;</code>, hence their eventual removal.</p>
<p>Some of these trigraphs were:</p>
<ul>
<li><code>??&lt;</code> = <code>{</code></li>
<li><code>??&gt;</code> = <code>}</code></li>
<li><code>??(</code> = <code>[</code></li>
<li><code>??)</code> = <code>]</code></li>
<li><code>??=</code> = <code>#</code></li>
<li><code>??/</code> = <code>\</code></li>
</ul>
<p>That being said, GCC does still include trigraphs as an opt-in feature via the <code>-trigraphs</code> flag - and I must admit, I&rsquo;m quite tempted to use them for stylised includes.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="o">??=</span><span class="n">include</span><span class="o">&lt;</span><span class="n">stdio</span><span class="p">.</span><span class="n">h</span><span class="o">&gt;</span>
</span></span></code></pre></div><h2 id="import"><code>#import</code></h2>
<blockquote>
<p><a href="https://gcc.gnu.org/onlinedocs/cpp/Alternatives-to-Wrapper-_0023ifndef.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://gcc.gnu.org/onlinedocs/cpp/Alternatives-to-Wrapper-_0023ifndef.html</a>
</p></blockquote>
<p>Those who have been keeping up with modern C++ should recognise the <code>import</code> keyword, used to import <a href="https://en.cppreference.com/w/cpp/language/modules.html"
	
		target="_blank" rel="noopener noreferrer"
	>modules</a>
 as an alternative to classic header includes.</p>
<p>However, <code>#import</code> is not to be confused with this, and goes way back to the 80s/90s when GCC implemented support for <a href="https://www.trevorlasn.com/blog/objective-c-is-the-ugliest-programming-language-and-a-total-abomination"
	
		target="_blank" rel="noopener noreferrer"
	>Objective-C</a>
. While also an alternative to <code>#include</code>, its function is to ensure that a header is only included in a project once. Although, this feature was later deprecated as it became agreed that it&rsquo;s better that the header file is responsible for whether or not it is included multiple times. Hence, developers nowadays are instead expected to either use <code>#ifndef</code> guards (generally recommended) or <code>#pragma once</code> (not standard) - or soon, perhaps, modules!</p>
<p>In the case of our code, there aren&rsquo;t multiple source files anyway, so <code>#import</code> is synonymous with <code>#include</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;bits/stdc++.h&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="nf">main</span><span class="p">(</span><span class="k">register</span> <span class="kt">int</span><span class="p">(</span><span class="n">C</span><span class="p">),</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span><span class="p">(</span><span class="n">_</span><span class="p">)[])</span> <span class="k">noexcept</span> <span class="o">-&gt;</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">C</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">_</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">_</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">C</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="bitsstdch"><code>bits/stdc++.h</code></h2>
<blockquote>
<p><a href="https://stackoverflow.com/questions/25311011/how-does-include-bits-stdc-h-work-in-c"
	
		target="_blank" rel="noopener noreferrer"
	>https://stackoverflow.com/questions/25311011/how-does-include-bits-stdc-h-work-in-c</a>
</p></blockquote>
<p><a href="https://stackoverflow.com/questions/25311011/how-does-include-bits-stdc-h-work-in-c"
	
		target="_blank" rel="noopener noreferrer"
	><code>bits/stdc++.h</code></a>
 is essentially a header that includes all the C and C++ headers, useful for quick testing, and especially useful for precompiled headers. Otherwise, though, it unsurprisingly slows down compilation, and it&rsquo;s better to just include the independent headers that are actually used. In our case, all we&rsquo;re doing is using <code>std::wclog</code> which comes from <code>iostream</code>, so we can just include that instead.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&#34;iostream&#34;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="nf">main</span><span class="p">(</span><span class="k">register</span> <span class="kt">int</span><span class="p">(</span><span class="n">C</span><span class="p">),</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span><span class="p">(</span><span class="n">_</span><span class="p">)[])</span> <span class="k">noexcept</span> <span class="o">-&gt;</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">C</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">_</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">_</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">C</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Moreover, we can replace the <code>&quot;&quot;</code> around <code>iostream</code> with the more typical <code>&lt;&gt;</code> as the only real difference in this case is expressing intention. This change signifies that <code>iostream</code> is an external header that is independent of our project:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="nf">main</span><span class="p">(</span><span class="k">register</span> <span class="kt">int</span><span class="p">(</span><span class="n">C</span><span class="p">),</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span><span class="p">(</span><span class="n">_</span><span class="p">)[])</span> <span class="k">noexcept</span> <span class="o">-&gt;</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">C</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">_</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">_</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">C</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="trailing-return-type">Trailing return type</h2>
<blockquote>
<p><a href="https://en.wikipedia.org/wiki/Trailing_return_type"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.wikipedia.org/wiki/Trailing_return_type</a>
</p></blockquote>
<p><strong>Trailing return types</strong> have been supported since C++11, which can make functions more readable in some cases via the syntax <code>auto foo() -&gt; T {}</code>, reminiscent of <a href="https://rust-lang.org/"
	
		target="_blank" rel="noopener noreferrer"
	>Rust</a>
&rsquo;s:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rs" data-lang="rs"><span class="line"><span class="cl"><span class="k">fn</span> <span class="nf">foo</span><span class="p">(</span><span class="n">x</span>: <span class="kt">u32</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">u32</span> <span class="p">{</span><span class="w"> </span><span class="cm">/* ... */</span><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>Generally-speaking, trailing return types have 3 main uses:</p>
<ol>
<li>Return type with <a href="https://en.cppreference.com/w/cpp/language/decltype.html"
	
		target="_blank" rel="noopener noreferrer"
	><code>decltype</code></a>
 (in C++11), before <code>decltype(auto)</code> was around (added in C++14):</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">template</span><span class="o">&lt;</span><span class="k">typename</span> <span class="n">A</span><span class="p">,</span> <span class="k">typename</span> <span class="n">B</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">add</span><span class="p">(</span><span class="n">A</span> <span class="n">a</span><span class="p">,</span> <span class="n">B</span> <span class="n">b</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="k">decltype</span><span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">);</span>
</span></span></code></pre></div><ol start="2">
<li><a href="https://en.cppreference.com/w/cpp/language/lambda.html"
	
		target="_blank" rel="noopener noreferrer"
	>Lambda expressions</a>
 (also introduced in C++11).</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">f</span> <span class="o">=</span> <span class="p">[](</span><span class="kt">int</span> <span class="n">x</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">double</span> <span class="p">{</span> <span class="k">return</span> <span class="n">x</span><span class="p">;</span> <span class="p">};</span>
</span></span></code></pre></div><ol start="3">
<li>Readability of more complex types.</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">template</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">integral</span> <span class="n">T</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="n">std</span><span class="o">::</span><span class="n">expected</span><span class="o">&lt;</span><span class="n">BinaryView</span><span class="o">::</span><span class="n">Error</span><span class="p">,</span> <span class="n">T</span><span class="o">&gt;</span> <span class="n">BinaryView</span><span class="o">::</span><span class="n">read</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">endian</span> <span class="n">endian</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">template</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">integral</span> <span class="n">T</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">BinaryView</span><span class="o">::</span><span class="n">read</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">endian</span> <span class="n">endian</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="o">-&gt;</span> <span class="n">std</span><span class="o">::</span><span class="n">expected</span><span class="o">&lt;</span><span class="n">T</span><span class="p">,</span> <span class="n">BinaryView</span><span class="o">::</span><span class="n">Error</span><span class="o">&gt;</span><span class="p">;</span>
</span></span></code></pre></div><p>In the case of <code>main</code>, the return type is just <code>int</code>, and so using a trailing return type is nothing but stylistic choice. Although I personally don&rsquo;t enforce trailing return types in my code unless I&rsquo;m using something verbose like <a href="https://en.cppreference.com/w/cpp/utility/expected.html"
	
		target="_blank" rel="noopener noreferrer"
	><code>std::expected</code></a>
, I do see why some programmers choose to use them in every function for consistency&rsquo;s sake.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="k">register</span> <span class="kt">int</span><span class="p">(</span><span class="n">C</span><span class="p">),</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span><span class="p">(</span><span class="n">_</span><span class="p">)[])</span> <span class="k">noexcept</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">C</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">_</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">_</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">C</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="noexcept"><code>noexcept</code></h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/noexcept_spec.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/noexcept_spec.html</a>
</p></blockquote>
<p>In short, <code>noexcept</code> as a specifier tells the compiler that a function will not attempt to propagate exceptions outwards - i.e., any exceptions that are propagated into the function are caught. This enables the compiler to make some optimisations as a result, but if the <code>noexcept</code> promise is broken, <a href="https://en.cppreference.com/w/cpp/error/terminate.html"
	
		target="_blank" rel="noopener noreferrer"
	><code>std::terminate</code></a>
 is called instead, exiting the program.</p>
<p>So is there any point in tagging <code>main</code> with <code>noexcept</code>? Well, no, because <code>main</code> will exit if it has a propagating exception anyway. Therefore, it serves no real purpose here:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="k">register</span> <span class="kt">int</span><span class="p">(</span><span class="n">C</span><span class="p">),</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span><span class="p">(</span><span class="n">_</span><span class="p">)[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">C</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">_</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">_</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">C</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="register"><code>register</code></h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/storage_duration.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/storage_duration.html</a>
</p></blockquote>
<p>The <code>register</code> keyword is an artefact of a time when compilers weren&rsquo;t as intelligent as they are now; the first time I ever saw it used was in the <a href="https://github.com/id-Software/DOOM/blob/a77dfb96cb91780ca334d0d4cfd86957558007e0/linuxdoom-1.10/am_map.c#L978"
	
		target="_blank" rel="noopener noreferrer"
	>DOOM codebase</a>
 of all places.</p>
<img src="images/DOOM.png" height="400px"/>
<p>What <code>register</code> does is signal to the compiler that a declared variable is going to be heavily used and should therefore be stored directly in a <a href="https://en.wikipedia.org/wiki/Processor_register"
	
		target="_blank" rel="noopener noreferrer"
	>CPU register</a>
 if possible, as registers are significantly faster than memory stores.</p>
<p>However, the keyword was deprecated as of C++11 and outright removed in C++17, as compilers are allowed to ignore this hint if needed, and they can generally decide when a variable should be in a register more reliably than a human can. Therefore, we have no need for it here:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span><span class="p">(</span><span class="n">C</span><span class="p">),</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span><span class="p">(</span><span class="n">_</span><span class="p">)[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">C</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">_</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">_</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">C</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Additionally, 64-bit systems primarily use the <a href="https://learn.microsoft.com/en-us/cpp/build/x64-calling-convention?view=msvc-170"
	
		target="_blank" rel="noopener noreferrer"
	>fast-call</a>
 convention which puts the first 4 arguments of a function into CPU registers anyway, so using <code>register</code> on the 1st argument of a function like this really is pointless.</p>
<h2 id="parenthesised-declarators">Parenthesised declarators</h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/declarations.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/declarations.html</a>
</p></blockquote>
<p>C++ supports <strong>parenthesised declarators</strong> to help with disambiguation in certain contexts, although can also be used in other contexts too. For instance, the following code is valid C++:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="kt">int</span><span class="p">((((((((</span><span class="n">a</span><span class="p">))))))))</span><span class="o">=</span><span class="mi">5</span><span class="p">;</span>
</span></span></code></pre></div><div class="godbolt-button">
	<a target="_blank" href="https://godbolt.org/z/n7re33oaf">Run this code!</a>
</div>

<p>More useful cases include:</p>
<ol>
<li>Function pointers</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="kt">int</span> <span class="o">*</span><span class="nf">f</span><span class="p">();</span>   <span class="c1">// A function that returns int*
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">f</span><span class="p">)();</span> <span class="c1">// A pointer to a function that returns int
</span></span></span></code></pre></div><ol start="2">
<li>Array pointers</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="kt">int</span> <span class="o">*</span><span class="n">a</span><span class="p">[</span><span class="mi">23</span><span class="p">];</span>   <span class="c1">// An array of 23 int*&#39;s
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="p">(</span><span class="o">*</span><span class="n">a</span><span class="p">)[</span><span class="mi">23</span><span class="p">];</span> <span class="c1">// A pointer to an array of 23 int&#39;s
</span></span></span></code></pre></div><p>There&rsquo;s also this funky case where the use of a constructor can be confused for a function declaration:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">Foo</span> <span class="nf">bar</span><span class="p">(</span><span class="n">Baz</span><span class="p">());</span>   <span class="c1">// Could be a function that has a parameter for a function that returns Baz
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">Foo</span> <span class="nf">bar</span><span class="p">((</span><span class="n">Baz</span><span class="p">()));</span> <span class="c1">// Unambiguous - simply takes the result of the function call Baz() in Foo&#39;s constructor
</span></span></span></code></pre></div><p>But C++11 added curly-brace initialisation for this exact reason, which I for one use religiously:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">Foo</span> <span class="n">bar</span><span class="p">{</span><span class="n">Baz</span><span class="p">()};</span>
</span></span></code></pre></div><p>In the context of our code, however, we don&rsquo;t need this disambiguation. The first parameter of <code>main</code> is simply an <code>int</code>, and the second is a <code>char*</code> array (<code>char**</code>), so the parenthesis just hurt readability and should be removed:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">C</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">_</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">C</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">_</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">_</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">C</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="underscore-identifier">Underscore identifier</h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/identifiers.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/identifiers.html</a>
</p></blockquote>
<p>Ignoring funky unicode stuff, C++ <strong>identfiers</strong> (such as variable names) can me made up of uppercase and lowercase Latin letters (A-Z and a-Z), underscores, and the digits 0-9 except for as the first character. There are also reserved identifiers, like with keywords and patterns like <code>_Foo</code> and <code>__bar</code>. However, a single underscore, <code>_</code>, rather than be reserved for wildcard syntax as seen in <a href="https://www.haskell.org/onlinereport/lexemes.html"
	
		target="_blank" rel="noopener noreferrer"
	>Haskell</a>
 and <a href="https://doc.rust-lang.org/book/ch19-03-pattern-syntax.html"
	
		target="_blank" rel="noopener noreferrer"
	>Rust</a>
, manages to somehow slip through as a valid identifer. This means that <code>_</code> can be used as a variable name.</p>
<p>Furthermore, C++ function <a href="https://breese.github.io/2022/03/06/deducing-function-signatures.html"
	
		target="_blank" rel="noopener noreferrer"
	>type signatures</a>
 are independent of the names given to the function&rsquo;s parameters, hence we are able to change the typical <code>argc</code> to just <code>C</code> (in order to have <code>C++</code> later in the code!) and <code>argv</code> to <code>_</code>. Changing these names back to normal, we get:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">argc</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">argv</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">argv</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>It is also worth noting that <code>const</code> can be used here without any issues as well. In fact, it is the first obfuscation so far that can actually be argued as idomatic C++, even if it is unusual! As such, I will choose leave it in.</p>
<h2 id="operator-overloading">Operator overloading</h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/operators.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/operators.html</a>
</p></blockquote>
<p>Anyone who knows C++ should remember the first time they learned how to print to the terminal, using the <code>&lt;&lt;</code> operator as if constructing a conveyor belt for which to stream content into <code>std::cout</code>. Hopefully, with <a href="https://en.cppreference.com/w/cpp/io/println.html"
	
		target="_blank" rel="noopener noreferrer"
	><code>std::println</code></a>
 slowly making its way into compilers, newcomers to C++ will never have to face this atrocity ever again. It is a textbook example of <strong>operator overloading</strong> gone wrong. At least, most would likely agree that overloading an operator to do something completely different from what it was originally intended to do is not a great idea, and we&rsquo;d be better of defining new operators instead (<a href="https://www.haskell.org/tutorial/monads.html"
	
		target="_blank" rel="noopener noreferrer"
	><code>&gt;&gt;=</code></a>
 anyone?).</p>
<p><code>&lt;&lt;</code> is originally the <a href="https://en.cppreference.com/w/cpp/language/operator_arithmetic.html"
	
		target="_blank" rel="noopener noreferrer"
	>bitwise left shift</a>
 operator, used for&hellip; well, shifting <a href="https://en.wikipedia.org/wiki/Bit"
	
		target="_blank" rel="noopener noreferrer"
	>bits</a>
. It was unfortunate enough to have the <a href="https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/ostream.h"
	
		target="_blank" rel="noopener noreferrer"
	><code>ostream</code></a>
 header overload it with its own custom behaviour.</p>
<p>That being said, a cool quirk of operator overloading, is that it necessitates some way to&hellip; overload operators, and C++ provides this by making it possible to define operators as functions, their symbols prefixed with <code>operator</code> (e.g., <code>operator+</code> or <code>operator&lt;&lt;</code>).</p>
<p>This also means that when such an overload is defined, it can be <em>called</em> in this way too, hence the following code snippets are equivalent:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;Hello, world!&#34;</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="p">,</span> <span class="s">&#34;Hello, world!&#34;</span><span class="p">).</span><span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">);</span>
</span></span></code></pre></div><p>With this mind, we can once again make our code significantly easier to read:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">wclog</span> <span class="o">&lt;&lt;</span> <span class="o">*</span><span class="p">(</span><span class="n">argc</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">argv</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">argv</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="stdwclog"><code>std::wclog</code></h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/io/clog.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/io/clog.html</a>
</p></blockquote>
<p>But hold on, what is <code>std::wclog</code>? Shouldn&rsquo;t it be <code>std::cout</code> that writes to standard output?</p>
<p><code>std::clog</code> is similar to <code>std::cerr</code> in that they both write to <a href="https://en.cppreference.com/w/cpp/io/c/std_streams.html"
	
		target="_blank" rel="noopener noreferrer"
	>standard error</a>
 (stderr). However, unlike <code>std::cerr</code>, <code>std::clog</code> is not automatically <a href="https://en.cppreference.com/w/cpp/io/manip/flush.html"
	
		target="_blank" rel="noopener noreferrer"
	>flushed</a>
, which is important where performance-critical conditions.</p>
<p><code>std::wclog</code> is just the <a href="https://en.wikipedia.org/wiki/Wide_character#C/C&#43;&#43;"
	
		target="_blank" rel="noopener noreferrer"
	>wide char</a>
 version of this. Typically, a wide char is more than just 1 byte, but <code>std::wcout</code> and its variants all <strong>implicitly convert</strong> <code>char*</code> to <code>wchar_t*</code>. Therefore, both these code snippets have the same visual result when a wide char is 4 bytes:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">static_assert</span><span class="p">(</span> <span class="k">sizeof</span><span class="p">(</span><span class="kt">wchar_t</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span> <span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Snippet 1
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">std</span><span class="o">::</span><span class="n">wcout</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">wchar_t</span><span class="o">*</span><span class="p">)</span><span class="s">&#34;b</span><span class="se">\0\0\0</span><span class="s">a</span><span class="se">\0\0\0</span><span class="s">z</span><span class="se">\0\0\0\0\0\0\0</span><span class="s">&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Snippet 2
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">std</span><span class="o">::</span><span class="n">wcout</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;baz&#34;</span><span class="p">;</span>
</span></span></code></pre></div><div class="godbolt-button">
	<a target="_blank" href="https://godbolt.org/z/cWf559nGn">Run this code!</a>
</div>

<p>Now, although it&rsquo;s not immediately obvious that our code uses normal <code>char*</code> as input to <code>std::wclog</code>, we can see that <code>(typeof(*argv))</code> is used as a cast (more on that later), which should evaluate to a <code>(char*)</code> cast. Therefore, it&rsquo;s fairly safe to assume that we can just use <code>std::cout</code> instead, and we&rsquo;ll also simplify the cast while we&rsquo;re at it:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="o">*</span><span class="p">(</span><span class="n">argc</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">argv</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">},</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="comma-operator">Comma operator</h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/operator_other.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/operator_other.html</a>
</p></blockquote>
<p>One of my absolute favourite features of C is the <strong>comma operator</strong>, which I imagine many programmers aren&rsquo;t aware even exists. What I find so fascinating about it is that it is technically useful - potentially really useful in some contexts - but is nevertheless generally <em>bad</em> to use.</p>
<p>Not to be confused with the use of commas in other C/C++ contexts (e.g. lists), the comma operator forms an <strong>expression</strong> in which the left-hand argument(s) are evaluated with their results discarded, while the evaluation of the right-most argument is what the expression returns, eerily similar to the <code>&gt;&gt;</code> operator in Haskell, minus the <a href="https://wiki.haskell.org/Monad"
	
		target="_blank" rel="noopener noreferrer"
	>monads</a>
.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-haskell" data-lang="haskell"><span class="line"><span class="cl"><span class="c1">-- putStr returns an IO (), which main requires.</span>
</span></span><span class="line"><span class="cl"><span class="nf">main</span> <span class="ow">::</span> <span class="kt">IO</span> <span class="nb">()</span>
</span></span><span class="line"><span class="cl"><span class="nf">main</span> <span class="ow">=</span> <span class="n">putStr</span> <span class="s">&#34;Hello, &#34;</span> <span class="o">&gt;&gt;</span> <span class="n">putStr</span> <span class="s">&#34;world!&#34;</span>
</span></span></code></pre></div><div class="godbolt-button">
	<a target="_blank" href="https://godbolt.org/z/YevvPKq3v">Run this code!</a>
</div>

<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="c1">// main requires that an int be returned.
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nf">puts</span><span class="p">(</span><span class="s">&#34;Hello, world!&#34;</span><span class="p">),</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><div class="godbolt-button">
	<a target="_blank" href="https://godbolt.org/z/zxjxa5aMP">Run this code!</a>
</div>

<p>Some seemingly useful applications of this include:</p>
<ol>
<li>Multiple varable mutation in index-based <code>for</code> loops:</li>
</ol>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="c1">// Comma operator used             ↓ here only!  
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">j</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;=</span> <span class="n">j</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">,</span> <span class="o">--</span><span class="n">j</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;i = &#34;</span> <span class="o">&lt;&lt;</span> <span class="n">i</span> <span class="o">&lt;&lt;</span> <span class="s">&#34; j = &#34;</span> <span class="o">&lt;&lt;</span> <span class="n">j</span> <span class="o">&lt;&lt;</span> <span class="sc">&#39;\n&#39;</span><span class="p">;</span>
</span></span></code></pre></div><p><div class="godbolt-button">
	<a target="_blank" href="https://godbolt.org/z/zb6fs1sz3">Run this code!</a>
</div>

2. Makeshift lambda expressions (not really):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">a</span> <span class="o">=</span> <span class="p">(</span><span class="n">a</span> <span class="o">=</span> <span class="mi">5</span><span class="p">,</span> <span class="n">a</span> <span class="o">*=</span> <span class="mi">3</span><span class="p">,</span> <span class="n">a</span> <span class="o">+=</span> <span class="mi">4</span><span class="p">,</span> <span class="n">a</span> <span class="o">%=</span> <span class="mi">8</span><span class="p">,</span> <span class="n">a</span> <span class="o">^=</span> <span class="mi">23</span><span class="p">);</span>
</span></span></code></pre></div><p><div class="godbolt-button">
	<a target="_blank" href="https://godbolt.org/z/aa86Tnnf4">Run this code!</a>
</div>

3. Logging in return statements:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="k">return</span> <span class="nf">LOG_ERROR</span><span class="p">(</span><span class="s">&#34;Division by zero.&#34;</span><span class="p">),</span> <span class="n">std</span><span class="o">::</span><span class="n">nullopt</span><span class="p">;</span>
</span></span></code></pre></div><div class="godbolt-button">
	<a target="_blank" href="https://godbolt.org/z/jvjshx8sP">Run this code!</a>
</div>

<p>In our code, we are incidentally making use of that last example, logging before returning <code>!true</code>. If we instead opt to write this out as two separate lines, we get something more conventional and readable:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="o">*</span><span class="p">(</span><span class="n">argc</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">[</span><span class="n">argv</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>But we&rsquo;re not done yet! There&rsquo;s another use of the operator within the dereference we have going on. Extracting this out to yet another line, things should be starting to make more sense:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">argc</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="o">*</span><span class="p">(</span><span class="nb">NULL</span><span class="p">[</span><span class="n">argv</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="o">!</span><span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="implicit-casting">Implicit casting</h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/implicit_cast.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/implicit_cast.html</a>
</p></blockquote>
<p>Love it or hate it, C++ is notorious for <strong>implicit type conversion</strong>, so it&rsquo;s pretty much expected that it&rsquo;d turn up somewhere in this code - and sure enough, it&rsquo;s easy to spot.</p>
<p>The function <code>main</code> has a return type of <code>int</code>, but we are attempting to return <code>!true</code>, so it must be that this <code>bool</code> expression is being implicitly converted to type <code>int</code>. In particular, <code>!true == false</code>, and <code>false</code> as an integer is simply <code>0</code>. Therefore, we can write:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">argc</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="o">*</span><span class="p">(</span><span class="nb">NULL</span><span class="p">[</span><span class="n">argv</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="array-subscript-commutativity">Array subscript commutativity</h2>
<blockquote>
<p><a href="https://learn.microsoft.com/en-us/cpp/cpp/subscript-operator?view=msvc-170"
	
		target="_blank" rel="noopener noreferrer"
	>https://learn.microsoft.com/en-us/cpp/cpp/subscript-operator?view=msvc-170</a>
</p></blockquote>
<p>The subscript operator, <code>[]</code>, is defined such that <code>a[b] == *(a + b)</code>. Because of how C <strong>pointer arithmeic</strong> works (more on that in a bit), this means that <code>a[b] == b[a]</code>, and the expression <code>NULL[argv]</code> is equivalent to <code>argv[NULL]</code>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">argc</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="o">*</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="nb">NULL</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="null"><code>NULL</code></h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/c/types/NULL.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/c/types/NULL.html</a>
</p></blockquote>
<p>But what even is <code>NULL</code>? In C, it is typically defined as a null pointer, but this is <a href="https://www.reddit.com/r/C_Programming/comments/1o58wbr/comment/nj7r7o3/"
	
		target="_blank" rel="noopener noreferrer"
	>implementation defined</a>
.</p>
<p>Importantly, it is allowed for <code>NULL</code> to be defined as the constant <code>0</code> or, as off <a href="https://en.cppreference.com/w/c/23.html"
	
		target="_blank" rel="noopener noreferrer"
	>C23</a>
, <code>nullptr</code> in order to remain compatible with C++. To avoid breaking this compatibility, it <em>cannot</em> be <code>(void*)0</code>, nor can it be an expression that evaluates to <code>0</code>, like <code>10 * 2 - 20</code>.</p>
<p>GCC defines <code>NULL</code> as its own magic keyword, <a href="https://gcc.gnu.org/onlinedocs/libstdc&#43;&#43;/manual/support.html"
	
		target="_blank" rel="noopener noreferrer"
	><code>__null</code></a>
, and is supposed to be a null pointer. Therefore, the GCC compiler generates the &ldquo;converting NULL to non-pointer type&rdquo; warning when attempting to index an array with it. As such, we&rsquo;d best just use <code>0</code> to access the first element of an array:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">argc</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="o">*</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="mi">9</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="pointer-arithmetic">Pointer arithmetic</h2>
<blockquote>
<p><a href="https://www.learncpp.com/cpp-tutorial/pointer-arithmetic-and-subscripting/"
	
		target="_blank" rel="noopener noreferrer"
	>https://www.learncpp.com/cpp-tutorial/pointer-arithmetic-and-subscripting/</a>
</p></blockquote>
<p>As mentioned previously, the subscript operator expands to <strong>pointer arithmetic</strong>, such that <code>a[b] == *(a + b)</code>.</p>
<p>However, consider the following:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">a</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">b</span> <span class="o">=</span> <span class="o">*</span><span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="mi">4</span><span class="p">);</span>
</span></span></code></pre></div><div class="godbolt-button">
	<a target="_blank" href="https://godbolt.org/z/Pa75aGTr8">Run this code!</a>
</div>

<p>It&rsquo;s important to note that <code>a + 4</code> does not simply mean adding 4 to the address of <code>a</code>. Rather, it is adding <code>4 * sizeof(a[0])</code>, which in this example evaluates  to <code>4 * sizeof(int) == 4 * 4 == 16</code>. Thus, <code>*(a + 4)</code> is equivalent to <code>a[4]</code>, and gives the value <code>4</code> from the array.</p>
<p>Likewise, our code <code>*(argv[0] + 9)</code> is equivalent to <code>argv[0][9]</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">argc</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">9</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>And since <code>argv</code> is a <code>char**</code> (i.e., an array of <code>char</code> arrays, i.e., an array of <a href="https://en.wikipedia.org/wiki/Null-terminated_string"
	
		target="_blank" rel="noopener noreferrer"
	>null-terminated strings</a>
), <code>argv[0][9]</code> is the 10th character of the 1st string in <code>argv</code>.</p>
<p>At this point, it&rsquo;s useful to actually see what this string is, because Godbolt&rsquo;s Compiler Explorer does in fact feed an argument to the program, and that is &ldquo;./output.s&rdquo;. Do some basic counting, and we can see that the 10th character in this string is indeed <code>'s'</code>. Let&rsquo;s make all of this more clear in our code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">argc</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">input</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="n">assert</span><span class="p">(</span><span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;s&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="octal">Octal</h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/integer_literal.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/integer_literal.html</a>
</p></blockquote>
<p>Back in the 1970s, <a href="https://en.wikipedia.org/wiki/Octal"
	
		target="_blank" rel="noopener noreferrer"
	>octal</a>
 (base-8) encoding was all the rage.</p>
<p>Unfortunately, this meant that unlike <a href="https://en.wikipedia.org/wiki/Binary_number"
	
		target="_blank" rel="noopener noreferrer"
	>binary</a>
 literals which are prefixed with <code>0b</code> or <a href="https://en.wikipedia.org/wiki/Hexadecimal"
	
		target="_blank" rel="noopener noreferrer"
	>hexadecimal</a>
 literals which are prefixed with <code>0x</code>, octal literals are only prefixed with <code>0</code> in C (and by extension, C++).</p>
<p>So really, <code>074144</code> in our everyday base-10 is 30820, which we can replace here:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">argc</span> <span class="o">^=</span> <span class="mi">30820</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">input</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="n">assert</span><span class="p">(</span><span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;s&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="xor">XOR</h2>
<blockquote>
<p><a href="https://en.wikipedia.org/wiki/Exclusive_or"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.wikipedia.org/wiki/Exclusive_or</a>
</p></blockquote>
<p><code>^</code> is C&rsquo;s <strong>exclusive or</strong> bitwise operator, and essentially takes the bits of two values and compares their bits in pairs, individually setting the resultant bits to <code>1</code> if the pairs do not match, and <code>0</code> otherwise.</p>
<p>In our code, <code>argc</code> starts as <code>1</code> (because there is one argument given to the program) and then is XOR&rsquo;d with <code>30820</code>. If we compute <code>1 ^ 30820</code>, we get <code>30821</code>, just so happens to give the same result as if we had added them together.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">argc</span> <span class="o">=</span> <span class="mi">30821</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">input</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="n">assert</span><span class="p">(</span><span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;s&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="o">++</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="post-increment-operator">Post-increment operator</h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/operator_incdec.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/operator_incdec.html</a>
</p></blockquote>
<p>Later in our code, we also see that <code>argc</code> is being incremented via the <strong>post-increment operator</strong> (<code>argc++</code>), the operator responsible for <a href="https://en.wikipedia.org/wiki/C%2B%2B#Etymology"
	
		target="_blank" rel="noopener noreferrer"
	>C++ being called what it is today</a>
.</p>
<p>However, although not immediately obvious, this operator doesn&rsquo;t actually <em>do</em> anything in this context. This is because we are passing <code>argc++</code> into the constructor of <code>long long</code>, meaning a new <code>long long</code> is constructed and <code>argc</code> is only incremented <em>after</em> the fact - unlike if <code>++argc</code> was used, which would increment it <em>before</em> <code>argc</code> is accessed.</p>
<p>Therefore, since <code>argc</code> isn&rsquo;t used used after this, the operation serves no purpose and can be removed.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">argc</span> <span class="o">=</span> <span class="mi">30821</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">input</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="n">assert</span><span class="p">(</span><span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;s&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="p">{</span><span class="n">argc</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="new"><code>new</code></h2>
<blockquote>
<p><a href="https://en.cppreference.com/w/cpp/language/new.html"
	
		target="_blank" rel="noopener noreferrer"
	>https://en.cppreference.com/w/cpp/language/new.html</a>
</p></blockquote>
<p>Now we&rsquo;re very close to deciphering this completely!</p>
<p>It is usually advised to new C++ programmers to avoid using <code>new</code> as much as possible, especially for programmers coming from <a href="https://en.wikipedia.org/wiki/Object-oriented_programming"
	
		target="_blank" rel="noopener noreferrer"
	>OOP</a>
 languages like <a href="https://stackoverflow.com/questions/7019754/what-does-the-new-keyword-actually-do-in-java-and-should-i-avoid-creating-new"
	
		target="_blank" rel="noopener noreferrer"
	>Java</a>
 which use it extensively. This is because it <a href="https://en.wikipedia.org/wiki/C_dynamic_memory_allocation"
	
		target="_blank" rel="noopener noreferrer"
	>allocates dynamic memory</a>
, unlike normal pointers which use automatic memory management. After all, dynamic memory is <a href="https://stackoverflow.com/questions/15857099/what-is-slower-about-dynamic-memory-usage"
	
		target="_blank" rel="noopener noreferrer"
	>computationally expensive</a>
 to work with!</p>
<p>However, a <code>new</code> expression can also serve another, extremely niche purpose: to get the address of some memory without needing to use the <code>&amp;</code> operator, since <code>new</code> returns the address of the memory it allocates. And that&rsquo;s exactly what&rsquo;s happening here!</p>
<p>Therefore, since we would prefer not to use dynamic allocation anyway, let&rsquo;s just use <code>&amp;</code> to get the address of the existing variable <code>argc</code> rather than duplicate its data:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">argc</span> <span class="o">=</span> <span class="mi">30821</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">input</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="n">assert</span><span class="p">(</span><span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;s&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">)</span><span class="o">&amp;</span><span class="n">argc</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>You&rsquo;ll also notice that I&rsquo;ve removed the <code>volatile const signed long long</code>, and that&rsquo;s because it is just fluff, as will become evident in our final step&hellip;</p>
<h2 id="string-in-disguise">String in disguise</h2>
<blockquote>
<p><a href="https://medium.com/@ryan_forrester_/c-integer-to-character-conversion-a-comprehensive-guide-ac8bf9e5940a"
	
		target="_blank" rel="noopener noreferrer"
	>https://medium.com/@ryan_forrester_/c-integer-to-character-conversion-a-comprehensive-guide-ac8bf9e5940a</a>
</p></blockquote>
<p>Finally, we are down to the last layer of obfuscation, and this just uses a neat little trick that isn&rsquo;t particularly special to C, but rather a quirk of how computers represent data in general.</p>
<p>First, it is important to understand that the <code>char</code> type is just the mapping of a byte-sized number ranging from 0-255 to what is typically an <a href="https://www.asciitable.com/"
	
		target="_blank" rel="noopener noreferrer"
	>ASCII</a>
 character. Therefore, a typical C string is just a sequence of these characters - an array of <code>char</code> values.</p>
<p>But what if we take a number that is bigger than a byte? Say, <code>30821</code>. Well, assuming we are using <a href="https://en.wikipedia.org/wiki/Endianness"
	
		target="_blank" rel="noopener noreferrer"
	>little endian</a>
, <code>30821</code> as an <code>int</code> is represented in hexadecimal as <code>65 78 00 00</code> (note that each pair of digits is 1 byte). Therefore, an <code>int</code> can also be thought of as an array of bytes - 4 in total if we assume that <code>sizeof(int) == 4</code>.</p>
<p>So what happens if we take this number and treat it as a <code>char</code> array? Well, <code>0x65 == 'e'</code> and <code>0x78 == 'x'</code>, so we get the string <code>&quot;ex&quot;</code>.</p>
<p>However, it&rsquo;s important to note that for a <code>char</code> array to be a valid C string, it must be null-terminated (i.e., ending with <code>0x00</code>). As a result, we are able toget a string of maximum length 3 from a single 32-bit integer. <code>&quot;ex&quot;</code> is only of length 2, so it is indeed able to fit within these constraints, and a larger type like the 64-bit <code>long long</code> is unnecessary.</p>
<p>So, when we cast <code>(char*)&amp;argc</code>, what we&rsquo;re really doing is telling the compiler to process our integer <code>argc</code> as a string instead, and finally it becomes clear why our program outputs &ldquo;sex&rdquo;. Let&rsquo;s remove this conversion and just make the value explicit:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">argv</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">input</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="n">assert</span><span class="p">(</span><span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;s&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">input</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;ex&#34;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>And voilà, we have successfully picked apart the original obfuscated code to reveal what it is really doing!</p>
<h2 id="conclusion">Conclusion</h2>
<p>So, it turns out that all this:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="o">%:</span><span class="n">import</span> <span class="s">&#34;bits/stdc++.h&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">auto</span> <span class="n">main</span><span class="p">(</span><span class="k">register</span> <span class="kt">int</span><span class="p">(</span><span class="n">C</span><span class="p">),</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span><span class="p">(</span><span class="n">_</span><span class="p">)</span><span class="o">&lt;::&gt;</span><span class="p">)</span> <span class="k">noexcept</span> <span class="o">-&gt;</span> <span class="kt">int</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="k">operator</span><span class="o">&lt;&lt;</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">wclog</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">C</span> <span class="o">^=</span> <span class="mo">074144</span><span class="p">,</span> <span class="nb">NULL</span><span class="o">&lt;:</span><span class="nl">_</span><span class="p">:</span><span class="o">&gt;</span> <span class="o">+</span> <span class="mi">9</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">        <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">typeof</span><span class="p">(</span><span class="o">*</span><span class="n">_</span><span class="p">))</span><span class="k">new</span> <span class="k">volatile</span> <span class="k">const</span> <span class="kt">signed</span> <span class="kt">long</span> <span class="kt">long</span><span class="o">&lt;%</span><span class="n">C</span><span class="o">++%&gt;</span><span class="p">,</span> <span class="n">not</span> <span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>is really just an obfuscated way of doing this:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;sex&#34;</span><span class="p">;</span> <span class="c1">// as in &#34;sextet&#34;
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">}</span>
</span></span></code></pre></div><p>To whoever gave this a read, I hope it was as insightful to you as it was fun for me to put together. But do not be fooled! What I have covered here is but the tip of an iceberg that will lead you far into the depths of Hell if you dare to attempt traversing your way to its bottom.</p>
<p>Perhaps I am exaggerating, but if you consider the fact that the comma operator can be overloaded&hellip; am I really?</p>
<h2 id="revisions">Revisions</h2>
<blockquote>
<p><i>The following is a list of changes I&rsquo;ve made to the original post. Feel free to contact me if you notice any other mistakes or misinformation in my articles!</i></p></blockquote>
<ul>
<li>[2026-03-04] - Previously said that <code>std::cerr</code> is <strong>buffered</strong>, but makes more sense to just say it&rsquo;s <strong>not automatically flushed</strong> compared to <code>std::clog</code>, as both are technically buffered anyway.</li>
<li>[2026-03-04] - Previously said that registers are faster to access than <strong><a href="https://en.wikipedia.org/wiki/Random-access_memory"
	
		target="_blank" rel="noopener noreferrer"
	>RAM</a>
</strong>, which is true, but it&rsquo;s more accurate to say <strong>memory stores</strong>.</li>
<li>[2026-03-05] - Unobfuscated example at the very end used <code>#import</code> instead of the correct <code>#include</code>.</li>
<li>[2026-03-05] - Added an example of Haskell&rsquo;s <code>&gt;&gt;</code> operator in comparison to C&rsquo;s <code>,</code> operator.</li>
<li>[2026-03-05] - Fixed <code>wchar_t</code> example, as was missing proper null terminator.</li>
<li>[2026-03-05] - Added Godbolt links to many of the code examples.</li>
</ul>
]]></content:encoded></item></channel></rss>