title: Why is std::string a standard layout type?
body: <p>Taking the example from here: <a href="https://stackoverflow.com/questions/6496545/trivial-vs-standard-layout-vs-pod">trivial vs. standard layout vs. POD</a></p>
  
  <p>The following code passes:</p>
  
  <pre><code>struct T {
  public:
      int i;
  private:
      int j;
  };
  
  static_assert(! std::is_standard_layout&lt;T&gt;::value, "");
  </code></pre>
  
  <p>Yet the following does not:</p>
  
  <pre><code>static_assert(! std::is_standard_layout&lt;std::string&gt;::value, "");
  </code></pre>
  
  <p>So if all it takes for a type not to be a standard layout, then how could std::string possible be one?</p>