<div dir="ltr">You can instead write this way.<div><br></div><div>auto Ret = StringSwitch<Optional<int>>(Str)</div><div>    .Case("foo", 1)</div><div>    ...</div><div>    .Default(None);</div><div><br></div><div>instead of</div><div><br></div><div><div>auto Ret = StringSwitch<int>(Str)</div><div>    .Case("foo", 1)</div><div>    ...</div><div>    .OrNone();</div></div><div><br></div><div>The former pattern is at least as readable as the latter (to me the former is easier to read), so I don't see a strong reason to add a new method to StringSwitch.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 3, 2016 at 11:07 AM, Zachary Turner <span dir="ltr"><<a href="mailto:zturner@google.com" target="_blank">zturner@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">zturner added a comment.<br>
<br>
I don't think that will work.<br>
<span class=""><br>
In <a href="https://reviews.llvm.org/D24686#559270" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D24686#559270</a>, @ruiu wrote:<br>
<br>
> I wonder if we need `OrNone`. Isn't it equivalent to `.Default(None)`?<br>
<br>
<br>
</span>It works if we add an additional overload of `Default()` like this:<br>
<br>
  Optional<R> Default(llvm::NoneType N) const {<br>
    if (Result)<br>
      return *Result;<br>
    return None;<br>
  }<br>
<br>
If people prefer that I can go with that instead of `OrNone`<br>
<br>
<br>
<a href="https://reviews.llvm.org/D24686" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D24686</a><br>
<br>
<br>
<br>
</blockquote></div><br></div>