<div dir="ltr">&quot;C() is S&quot; shall be false, and you won&#39;t be able passing C where S is required.<div><br></div><div>you will be able passing c.`struct` though (or some better equivalent name).<div>passing c.`struct` would be no different than it is now should you implement this class manually with explicitly defined var for S.<br><div><div><br></div><div><span style="font-size:12.800000190734863px">Mike</span></div><div><span style="font-size:12.800000190734863px"><br></span></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 21 June 2017 at 22:08, Charlie Monroe <span dir="ltr">&lt;<a href="mailto:charlie@charliemonroe.net" target="_blank">charlie@charliemonroe.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">What happens when you pass C somewhere where S is required? Is that an error?<br>
<br>
C() is S // Is this true or false?<br>
<br>
<br>
If it&#39;s true, then you can pass a mutable instance somewhere let is used, if it&#39;s false, then it is really confusing...<br>
<div><div class="h5"><br>
<br>
&gt; On Jun 21, 2017, at 8:29 PM, Mike Kluev via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; sorry if this was already discussed.<br>
&gt;<br>
&gt; proposing an ability to derive a class from a struct or another value type (e.g. enum).<br>
&gt; would make it easy to wrap value type in a reference type without explicit code:<br>
&gt;<br>
&gt; struct S {<br>
&gt;     var v: Int<br>
&gt;     func method() {}<br>
&gt;     static staticMethod() {}<br>
&gt; }<br>
&gt;<br>
&gt; class C: S {<br>
&gt;       func otherMethod() {}<br>
&gt;       // ...<br>
&gt; }<br>
&gt;<br>
&gt; let c = C()<br>
&gt;<br>
&gt; c.v = 1<br>
&gt; c.method()<br>
&gt; C.staticMethod()<br>
&gt; c.otherMethod()<br>
&gt;<br>
&gt; shall work as if i had a struct variable and all struct functions implemented in a class calling through that var:<br>
&gt;<br>
&gt; pseudo code:<br>
&gt;<br>
&gt; class C {<br>
&gt;<br>
&gt; // auto generated internally:<br>
&gt;     var `struct`: S<br>
&gt;<br>
&gt;     func method() {<br>
&gt;         `struct`.method()<br>
&gt;     }<br>
&gt;     static staticMethod() {<br>
&gt;         S.staticMethod()<br>
&gt;     }<br>
&gt; //---<br>
&gt;<br>
&gt;       func otherMethod() {}<br>
&gt; }<br>
&gt;<br>
&gt; would also be nice to have ability to overload struct&#39;s methods:<br>
&gt;<br>
&gt; class C: S {<br>
&gt;     override func method() {<br>
&gt;         super.method()<br>
&gt;     }<br>
&gt; }<br>
&gt;<br>
&gt; and have struct initializators inherited:<br>
&gt;<br>
&gt; let c = C(struct initialization params)<br>
&gt;<br>
&gt; thoughts?<br>
&gt;<br>
&gt; Mike<br>
&gt;<br>
</div></div>&gt; ______________________________<wbr>_________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br>
<br>
</blockquote></div><br></div>