See, I&#39;ve made this mistake as well, and *not* because I thought it casts the literal. I had always assumed that something like `UInt16(42)` would initialize using the integer literal init, since it seems logical that that&#39;s the most specific. The proposed change reflects my currently erroneous mental model.<br><div class="gmail_quote"><div dir="ltr">On Thu, Jun 2, 2016 at 16:42 Brent Royal-Gordon 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">&gt; In my opinion, using this initializer-call syntax to build an explicitly-typed literal is an obvious and natural choice with several advantages over the &quot;as&quot; syntax.  However, even if you disagree, it&#39;s clear that programmers are going to continue to independently try to use it, so it&#39;s really unfortunate for it to be subtly wrong.<br>
<br>
I&#39;ve seen developers do this; in one memorable case, it resulted in Swift taking a ridiculously long time to typecheck an expression, since the seemingly pinned-down types of the literals had actually become *more* ambiguous, not less.<br>
<br>
However, it&#39;s not difficult to teach developers to use `as`. Usually what&#39;s happening is that their mental model of the language is wrong: they think of `UInt16(foo)` as a cast to a primitive type, and are surprised to learn that it&#39;s actually an initializer on a struct and they&#39;re initializing an instance. Learning this helps them understand how the language works, what the difference is between initializers and `as`, and how they can write the same things they see in the standard library types.<br>
<br>
I think *actually* turning this into magic would be counterproductive. The better solution is to make the compiler replace me in that story, by having it emit a warning with a fix-it. It keeps initializer calls meaning exactly what they say. (And it doesn&#39;t require an evolution proposal to do, since you can add a warning with a mere bug.)<br>
<br>
        UInt16(42)<br>
        ^~~~~~ ^~<br>
        Use of initializer with integer literal does not cast &#39;42&#39; to &#39;UInt16&#39;<br>
        Fix-It: Replace with &#39;42 as UInt16&#39;<br>
<br>
--<br>
Brent Royal-Gordon<br>
Architechies<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" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div>