> > If something should never happen (as in this case) then an abort/assert > > is completely appropriate. Once things get that screwed up there's no > > right answer, and the best thing we can do is terminate immediately to > > try and avoid further damage. > > This case was: > > switch (foo & 0x03) { > case 0: case 1: case 2: case 3: > default: > } > > The default is unreachable. Having it there just introduces more code > that serves no purpose. Unless someone does something totally foolish > and changes the mask in the switch statement, there's no way it will > ever be reachable.
I mistakenly remembered this was using a symbolic mask rather than a literal 0x03. In that case I'd argue it's much easier to make the dumb error you describe, and the assert can be a handy cluebat. I guess it's largely personal preference - I prefer to add the default case to make it clear that falling through is never gong to be the right answer. Paul