<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi all,<div class=""><br class=""></div><div class="">A little while back, I added an error to the Swift 4.1 compiler that complains if one tries to use conditional conformances, along with a flag “-enable-experimental-conditional-conformances” to enable the feature. We did this because we haven’t implemented the complete proposal yet; specifically, we don’t yet handle dynamic casting that involves conditional conformances, and won’t in Swift 4.1.</div><div class=""><br class=""></div><div class="">I’d like to take away the "-enable-experimental-conditional-conformances” flag and always allow conditional conformances in Swift 4.1, because the changes in the standard library that make use of conditional conformances can force users to change their code *to themselves use conditional conformances*. Specifically, if they had code like this:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><font face="Menlo" class="">extension MutableSlice : P { }</font></div><div class=""><font face="Menlo" class="">extension MutableBidirectionalSlice : P { }</font></div><div class=""><font face="Menlo" class="">// …</font></div></blockquote><div class=""><br class=""></div><div class="">they’ll get an error about overlapping conformances, and need to do something like the following to fix the issue:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><font face="Menlo" class="">extension Slice: P where Base: MutableCollection { }</font></div></blockquote><div class=""><br class=""></div><div class="">which is way more elegant, but would require passing "-enable-experimental-conditional-conformances”. That seems… unfortunate… given that we’re forcing them to use this feature.</div><div class=""><br class=""></div><div class="">My proposal is, specifically:</div><div class=""><br class=""></div><div class=""><ul class="MailOutline"><li class="">Allow conditional conformances to be used in Swift 4.1 (no flag required)</li><li class="">Drop the -enable-experimental-conditional-conformances flag entirely</li><li class="">Add a runtime warning when an attempt to dynamic cast fails due to a conditional conformance, so at least users know what’s going on</li></ul></div><div class=""><br class=""></div><div class="">Thoughts?</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>- Doug</div><div class=""><br class=""></div></body></html>