/.../ and most of the time there shouldn't be any error. (Right?)
There could be applications that throw some errors fairly frequently, so speed can't be ignored. Anyway, with the option to resort to the err->is_my_error variety, the type comparisons can always be avoided when performance is very important.
True.
Throwing errors slowly is a feature. It discourages the use of errors as a signaling mechanism in the normal program flow.