&gt; x + y is syntactic sugar for x.__add__(y)<p>It&#x27;s more complicated than that. If __add__ fails it falls back to __radd__:<p><pre><code>  &gt;&gt;&gt; class Spam(object):
  ...   def __radd__(self, first):
  ...     return str(first) + &quot;radd&quot;
  ... 
  &gt;&gt;&gt; 5+Spam()
  &#x27;5radd&#x27;
  &gt;&gt;&gt; Spam()+5
  Traceback (most recent call last):
    File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
  TypeError: unsupported operand type(s) for +: &#x27;Spam&#x27; and &#x27;int&#x27;
</code></pre>
I skimmed the paper to see if it caught this nuance, but don&#x27;t think it did. (&quot;The desugaring follows a strategy similar to that of Python, by applying the _plusmethod of the left subexpression to the right subexpression&quot;)<p>(The &quot;.&quot; is another level of sugar, as &quot;a.__add__&quot; is equivalent to &quot;getattr(a, &#x27;__add__&#x27;)&quot;. And &quot;a&quot; is sugar for &#x27;a&#x27;, as single quotes were in Python before double quotes.)<p>&gt; Syntactic sugar is when you define a piece of syntax in a language in terms of the rest of the language.<p>I believe that definition is incomplete. Is the &quot;for&quot; loop in C syntactic sugar for a while() loop?<p><pre><code>  for (x=0; x&lt;n; x++) { ... }
</code></pre>
is equivalent to<p><pre><code>  x=0;
  while (x&lt;n) {
    ...
    x++;
  }
</code></pre>
or is the &quot;while&quot; loop syntactic sugar for a for loop?<p><pre><code>  while (condition) {
     ...
  }
</code></pre>
is equivalent to:<p><pre><code>  for(;condition;) {
  }
</code></pre>
Given the &#x27;goto&#x27;, both are sugar for an if&#x2F;goto plus automatic goto target label generator, so I&#x27;ll repose the question in a C-without-goto variant language.