Reasons for structure of standard exception hierarchy
<p>This is a picky thing and it is probably just my OCD flairing up but I was wondering why the standard exception class hierarchy is set up as it is.</p>

<pre><code>exception
  bad_alloc
  bad_cast
  bad_typeid
  bad_exception
  ios_base::failure
  runtime_error
    subclasses...
  logic_error
    subclasses...
</code></pre>

<p>Couldn't all the bad_* exceptions just be subclasses of something like lang_support_error?  And ios_base::failure seems completely out of place.</p>

<p>Is there some historical or technical reasons the hierachy ended up like this?</p>
