<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Nov 12, 2017 at 10:16 PM, Slava Pestov <span dir="ltr">&lt;<a href="mailto:spestov@apple.com" target="_blank">spestov@apple.com</a>&gt;</span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space"><div><span class=""><blockquote type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Pardon my lack of imagination, but could you provide an example of a call site that would become ambiguous?</div></div></div></div></blockquote><div><br></div></span><div>protocol P {}</div><div>protocol Q {}</div>struct S : P, Q {}</div><div><br></div><div>struct Outer {</div><div>  static func foo(_: P) {}</div><div><br></div><div>  struct Inner {</div><div>    static func foo(_: Q) {}</div><div><br></div><div>    static func bar() {</div><div>       foo(S())</div><div>    }</div><div>  }</div><div>}</div></div></blockquote><div><br></div><div>Resolves to Inner.foo just like it does today.</div><div><br></div><div>We would still start from the innermost scope and work our way outward until we find a match. The only difference is we no longer stop partway up the chain *without* finding a match.</div><div><br></div><div>If we do find a match then yes, of course we stop there and use it.</div><div><br></div><div>Nevin</div></div></div></div>