<div dir="ltr">In retrospect is it useful for Optional to be supported in isa? Since its dynamic type is the same as its static type?</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jan 23, 2018 at 10:50 PM Dmitry Borisenkov via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">dmitry added inline comments.<br>
<br>
<br>
================<br>
Comment at: unittests/Support/Casting.cpp:288-289<br>
+  EXPECT_TRUE(isa<Base>(DShared));<br>
+  llvm::Optional<Derived> DOpt;<br>
+  EXPECT_TRUE(isa<Base>(DOpt));<br>
+}<br>
----------------<br>
dblaikie wrote:<br>
> Does this change then mean that one could cast<T> from Optional<Derived> to Optional<Base>? Because that'd be problematic, owing to Optional being a value-type. (it'd slice the object)<br>
This change doesn't modify casts behavior - just isa.<br>
As for the plan, cast should return T*, so<br>
```<br>
Optional<Derived> DOpt;<br>
Base *b = cast<Base>(DOpt); //Just cast pointer to underlying data to Base*, does not handle potential ownership issues.<br>
```<br>
should work, but it's ok.<br>
Move cast would be indeed problematic for value-types. So I would probably restrict it.<br>
<br>
<br>
<a href="https://reviews.llvm.org/D42027" rel="noreferrer" target="_blank">https://reviews.llvm.org/D42027</a><br>
<br>
<br>
<br>
</blockquote></div>