This is an orthogonal issue to the first that you identified. The first has to do with the associativity of the operator, the second has to do with the precedence of the operator.<br><br>I think there&#39;s sufficient confusion about the first that it&#39;s worth addressing. However, with respect to precedence, at the end of the day every operator has to have a precedence. Since ?? and ?: have no counterparts in math, there&#39;s no reason that a new user would know whether the precedence is higher or lower than that of arithmetic operators. It&#39;s simply listed in a table.<br><br>I don&#39;t know that it&#39;s feasible to warn on every use of operators with mixed precedence. Doing so would effectively do away with the concept of precedence at all, since everything would have to be grouped by parentheses in order to avoid warnings. (The core team has been pretty clear that there will be no &#39;optional&#39; warnings, and in certain organizations warnings are regarded as errors.)<br><div class="gmail_quote"><div dir="ltr">On Tue, Jun 14, 2016 at 17:50 Andrey Fidrya via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>I&#39;ve given it some more thought... Even expressions with single ?? can be confusing.</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>For example:</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px"><span></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>1)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px"><span></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>let z = a ?? x + y + z</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px"><span></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>Actually it&#39;s</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>let z = a ?? (x + y + z)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px"><span></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>But can be mistakenly interpreted as</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>let z = (a ?? x) + y + z</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px"><span></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>2) Same problem with ?:</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px"><span></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>let z = a ? b : c + x + y</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px"><span></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>It&#39;s</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>let z = a ? b : (c + x + y)</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px"><span></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>Not</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><span>let z = (a ? b : c) + x + y</span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px"><span></span><br></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo;min-height:13px">Possibly warnings should be shown in both these cases. Or is it too extreme?</div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo"><br></div></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:Menlo">--</div><div>
<div>Andrey Fidrya</div><div><br></div><br>

</div></div><div style="word-wrap:break-word">
<br><div><blockquote type="cite"><div>On 15 Jun 2016, at 01:08, Roth Michaels via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div><div>On Sun, Jun 12 2016 at 02:01:17 AM, Andrey Fidrya via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br><blockquote type="cite">Nil coalescing operator has very low precedence and it&#39;s very easy to forget the parentheses.<br>It&#39;s tempting to write something like this:<br><br>let result = v1 ?? 0 + v2 ?? 0<br><br>Which will resolve to<br><br>let result = v1 ?? (0 + v2 ?? 0)<br></blockquote><br>This is how I would expected the operator to work.<br><br><blockquote type="cite">This seems to be a source of errors in other languages as well, for example:<br><a href="http://www.codeproject.com/Tips/721145/Beware-The-null-coalescing-operator-is-low-in-the" target="_blank">http://www.codeproject.com/Tips/721145/Beware-The-null-coalescing-operator-is-low-in-the</a><br><br>I propose to consider raising it&#39;s precedence or requiring parentheses if ?? is used with multiple statements.<br></blockquote><br>I like the idea of requiring parenthesis (or at least having a warning)<br>on ambiguous lines with two `??`.<br><br>--<br>Roth<br><br>_______________________________________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div></div></blockquote></div><br></div>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div>