if (auto y = dynamic_cast<Derived *>(x))is perfectly fine and fluent
if foo = bar
<raz> in many (most?) languages assignment in conditional is a compiler warning or even error. and i think for good reason.
that is not true though
if, have to double-take almost every time i see it. kotlin's solution feels cleaner to me, they made the safe-nav operators convenient (even added elvis-op) and
if foo = some_nilableI think that very clearly expresses the intent that the branch depends on
foo = some_nilable; if fooas well. And I definitely prefer that if
foois used outside the conditional as well.
foois just used as non-nil inside the branch, combining it with the condition itself seems like a good idea to me.
.tryas unwieldy as they are was to motivate users to avoid them. but then at the same time we have this little backdoor (if =)
if foo = some_nilablewould be
foo = some_nilable; if foo(or maybe a dedicated assignment operator as @asterite mentioned)
if foo = anythingis not allowed at all. i imagine they may have had a similar discussion in their past)
if foo = nilableinstead of