<div dir="ltr">&gt; This has been suggested before, usually in the form of a separate `implement` keyword. The main problem is that it makes it impossible to write a protocol after the fact which formalizes some existing pattern in the types.<br><div class="gmail_extra"><div class="gmail_quote"><br></div><div class="gmail_quote">I think this is a great point and would be a con that I hadn&#39;t considered in terms of Howard&#39;s suggestion that everything implementing a protocol should have use a keyword (such as &quot;override&quot; or &quot;implement&quot;).</div><div class="gmail_quote"><br></div><div class="gmail_quote">I fear that I&#39;ve explained my idea a little poorly. My thought was that *only methods overriding something*--namely, a default implementation given in a protocol extension--should be required to use the override keyword when the method is dynamically dispatched.</div><div class="gmail_quote"><br></div><div class="gmail_quote">It would remain very much possible to formalize an existing pattern because, in the case of your example (unless I&#39;m misunderstanding?), you are not also providing a default implementation of the &quot;min&quot; and &quot;max&quot; getters, and the IntXX structs would have nothing to override. Indeed, you&#39;d hardly be formalizing an existing pattern if you had to supply de novo implementations! It&#39;s true that it&#39;s possible to do something in today&#39;s Swift syntax that wouldn&#39;t be possible in my proposal. Namely, in today&#39;s Swift syntax, it&#39;s possible to give a dynamically dispatched default implementation of the min and max getters in an after-the-fact formalization, but I have trouble seeing any circumstance in which that would be necessary--unless I misunderstand, such a default implementation can never be invoked?</div><div class="gmail_quote"><br></div><div class="gmail_quote"><br></div><div class="gmail_quote">On Tue, Jan 5, 2016 at 10:50 PM, Brent Royal-Gordon <span dir="ltr">&lt;<a href="mailto:brent@architechies.com" target="_blank">brent@architechies.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">&gt; Taking inspiration from syntax used for methods in classes that override methods in superclasses, require methods that override dynamically dispatched default implementations in protocol extensions to use the override keyword. Likewise, forbid the override keyword if the method being implemented instead &#39;masks&#39; (would that be the right word?) a statically dispatched method in a protocol extension which can nonetheless be invoked by upcasting to the protocol.<br>
<br>
</span>This has been suggested before, usually in the form of a separate `implement` keyword. The main problem is that it makes it impossible to write a protocol after the fact which formalizes some existing pattern in the types.<br>
<br>
What do I mean by that? Well, imagine you need generic access to the `min` and `max` static properties of the various integer types. There&#39;s no existing protocol that includes those members. But you can write one and then extend the integer types to conform to your new protocol:<br>
<br>
        protocol BoundedIntegerType: IntegerType {<br>
                static var min: Self { get }<br>
                static var max: Self { get }<br>
        }<br>
        extension Int: BoundedType {}<br>
        extension Int8: BoundedType {}<br>
        extension Int16: BoundedType {}<br>
        extension Int32: BoundedType {}<br>
        extension Int64: BoundedType {}<br>
<br>
        func printLowestPossibleValueOfValue&lt;Integer: BoundedIntegerType&gt;(x: Integer) {<br>
                print(Integer.min)<br>
        }<br>
<br>
This only works because `min` and `max` *don&#39;t* need any special marking to be used to satisfy a requirement. Requiring a keyword like you suggest would remove that feature.<br>
<span class=""><font color="#888888"><br>
--<br>
Brent Royal-Gordon<br>
Architechies<br>
<br>
</font></span></blockquote></div><br></div></div>