<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, May 16, 2019 at 11:18 PM Eric Fiselier <<a href="mailto:eric@efcs.ca">eric@efcs.ca</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I'm coming into this conversation late, so let me pontificate for a moment:<div><br></div><div>A large problem for the C++ commitee and standardization in general is that we don't actually get feedback from</div><div>the experimental components we standardize and which standard libraries ship.</div><div><br></div><div>We want user feedback. And user feedback only comes when vendors can ship these experiments to users.</div></div></blockquote><div><br></div><div>Right.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>The utility of feedback is it allows us to fix the experimental specification before it becomes locked in. This means</div><div>allowing experimental implementation to change and evolve. We need to be allowed to make breaking changes.</div><div>This requires breaking users.</div></div></blockquote><div><br></div><div>Agreed.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>With that in mind, here are my thoughts on the proposal:</div><div><br></div><div>* The "experimental" treatment should apply only to components the ISO C++ committee deems "experimental".</div><div><br></div><div>* `std::experimental::foo` and `std::foo` are different things. It's important for users to understand that</div><div>  `std::experimental::foo` provides none of  the same API/ABI stability guarantees `std::foo` does.</div></div></blockquote><div><br></div><div>Right.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>* We want to make it easy for users to transition from `std::experimental::foo` to `std::foo`.<br></div></div></blockquote><div><br></div><div>I don't see how we (libc++) have any affect on this; other than making sure that `std::foo` is available.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div></div><div>* It's super surprising when  `std::experimental::foo` and  `std::foo` both exist but have different behavior. If <br></div><div>  the `std::` version changed, we should consider this a bug fix against the experimental specification. Having</div><div>  two disparate sets of behavior helps no one.</div></div></blockquote><div><br></div><div>I disagree here; each one has a different specification.</div><div>We should match the specs. If someone wants the new behavior in std::foo, then they should use std::foo.</div><div><br></div><div>In the long (or even not-so-long) run, there should be only one: `std::foo`. </div><div>Once that has landed in a shipping standard, we should get rid of `std::experimental::foo` as soon as possible.</div><div><br></div><div>-- Marshall</div></div></div>