That was the behaviour in its very first iteration, in Swift 2. In Swift 3, rethrows
was revised ("loosened") to mean what it does now: that it can throw [any type it wants] only if & when one of its arguments throws, in order to specifically enable wrapping of lower-level errors (perhaps since generic Error
s are not extensible nor chainable, but it's common to want to attach additional information to an exception record as it propagates up through multiple layers of API).
For further details, see this series of archeological posts from the earlier pitch review thread.
Also, welcome back! Or are you just here to nab ideas for your new language, like @dabrahams?