<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="" applecontenteditable="true"><br class=""><div><blockquote type="cite" class=""><div class="">On May 2, 2017, at 16:53, David Sweeris via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" class=""><div class=""><br class="Apple-interchange-newline">On May 2, 2017, at 4:39 PM, Nevin Brackett-Rozinsky via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">If I write a generic function like this:</div><div class=""><br class=""></div><div class=""><font face="monospace, monospace" class="">func f&lt;T&gt;(_ x: T) { print("Generic: \(x)") }</font></div><div class=""><br class=""></div><div class="">I can pass it to another function like this:</div><div class=""><br class=""></div><div class=""><font face="monospace, monospace" class="">func g(_ fn: (Int) -&gt; Void) { fn(0) }</font></div><div class=""><font face="monospace, monospace" class="">g(f) &nbsp; &nbsp;// Prints “Generic: 0”</font></div><div class=""><br class=""></div><div class="">However if I *also* write a non-generic function like this:</div><div class=""><br class=""></div><div class=""><font face="monospace, monospace" class="">func f(_ x: Int) { print("Int: \(x)") }</font><br class=""></div><div class=""><br class=""></div><div class="">Then when I make the same call as before:</div><div class=""><br class=""></div><div class=""><font face="monospace, monospace" class="">g(f) &nbsp; &nbsp;// Prints “Int: 0”</font></div><div class=""><br class=""></div><div class="">It passes in the new, non-generic version.</div><div class=""><br class=""></div><div class="">Is there something I can do, with both versions of f defined, to pass the generic f into g?</div></div></div></blockquote><br class=""></div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Not that I know of. Once the code path gets to g(), the compiler knows that the function is specifically an (Int)-&gt;Void, as opposed to the generic (T)-&gt;Void, and it’ll always go for the most specific overload. AFAIK, anyway.</div></div></blockquote><br class=""></div><div>You can always <i class="">throw away</i>&nbsp;infromation by making a new generic context:</div><div><br class=""></div><div>func callF&lt;T&gt;(_ x: T) -&gt; Void {</div><div>&nbsp; f(x)</div><div>}</div><div>g(callF)</div><br class=""><div class="">Jordan</div></body></html>