title: How can std::runtime_error::runtime_error(const std::string&) meet std::exception's requirement of throw()?
body: <p><code>std::exception</code> requires that its constructor be <code>throw()</code>. Yet <code>std::runtime_error</code> accepts a <code>std::string</code> as its argument, which indicates that it's storing a <code>std::string</code> somewhere. Therefore, an assignment or copy construction has to be going on somewhere. And for <code>std::string</code>, that's not a <code>nothrow</code> operation.</p>
  
  <p>How then does <code>runtime_error::runtime_error</code> meet <code>throw()</code>?</p>
  
  <p>(For context, I'm implementing an exception type, and want to store a few <code>std::string</code>s from the call site, and I want to do it correctly...)</p>