Actually, this code has a somewhat subtle behavior, since it is catching by-value, prior to throwing. If a derived exception is thrown, it will be "clipped" to the base class when it is thrown. This could be potentially different from invoking throw, which would throw the derived class.