https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145
--- Comment #24 from Boris Kolpackov <boris at kolpackov dot net> --- Some more speculation/crazy ideas about the potential fix: If just throwing the new version and forgetting about the old one is an option, then perhaps we could "de-inherit" old from std::exception and inherit new from this modified variant of old (in addition to system_error). This will give us: 1. Old code will be able to catch it as old ios::failure. 2. Old code will be able to catch it as std::exception (via the new version's inheritance chain). 3. typeid() will even report it as ios::failure (unlike in my previous suggestion). Regarding how to have two version at the same time, I may be wrong, but I thought inline namespaces were used to implement this dual ABI.