<div dir="ltr">I also want to start a discussion (in a separate thread) about allowing @noreturn functions to &quot;return&quot; any type, so that the unreachable code checks can allow you to do things like &quot;let value = fatalError()&quot;. For this sort of thing, I think it&#39;s nice that noreturn is not an actual uninhabited type, but has special meaning w.r.t. control flow, and could in fact be part of the type signature.<div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div>Jacob<br></div></div></div></div>
<br><div class="gmail_quote">On Thu, Feb 25, 2016 at 2:51 PM, Radosław Pietruszewski <span dir="ltr">&lt;<a href="mailto:radexpl@gmail.com" target="_blank">radexpl@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">&gt; On 25 Feb 2016, at 23:47, Joe Groff &lt;<a href="mailto:jgroff@apple.com">jgroff@apple.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt;&gt; On Feb 25, 2016, at 2:43 PM, Radosław Pietruszewski &lt;<a href="mailto:radexpl@gmail.com">radexpl@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; On 25 Feb 2016, at 23:40, Joe Groff &lt;<a href="mailto:jgroff@apple.com">jgroff@apple.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Feb 25, 2016, at 2:40 PM, Radosław Pietruszewski &lt;<a href="mailto:radexpl@gmail.com">radexpl@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Ah, that’s a neat idea! Not sure it’s an improvement though to have a magic type that changes how the compiler treats your method, rather than a rather explicit *attribute* on the method…<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; There&#39;s no magic. If you can&#39;t construct a value of your return type, you can&#39;t return.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; -Joe<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; The magic is somewhere else. Calling a @noreturn function allows you to do things you can’t otherwise do:<br>
&gt;&gt;<br>
&gt;&gt; func foo() -&gt; Int {<br>
&gt;&gt;      fatalError()<br>
&gt;&gt; }<br>
&gt;<br>
&gt; I see. The unreachable code check arguably ought to also accept this if fatalError returns any uninhabited type, since it&#39;ll never be able return if that&#39;s the case.<br>
&gt;<br>
&gt; -Joe<br>
<br>
</div></div>Would that actually be useful today? (i.e. aside from your idea) To me, having a NoReturn return type seems more magic and less obvious than an attribute.<br>
<br>
— Radek</blockquote></div><br></div></div>