On Thursday, 31 July 2014 at 10:24:07 UTC, ponce wrote:
If I write:
---
switch(expr())
{
case 0: doIt();
case 1: doThat();
default:
assert(0);
}
---
Will the optimizer be able to remove the default: case?
Assuming fall-through (`goto case`), not only the default case.
The entire switch could be removed, under the condition that the
compiler can prove that neither `expr()`, `doIt()`, nor
`doThat()` throws, even if they have side effects. And maybe even
the entire function, and all functions that call it, depending on
how exactly the control flow is.