title: Why is this not a POD?
body: <p>This is about <a href="http://en.cppreference.com/w/cpp/types/is_pod"><code>std::is_pod</code></a>, which detects whether a template is a <em>plain old data type</em> or not.</p>
  
  <p>See the following code:</p>
  
  <pre><code>struct A {
  public:
      int m1;
      int m2;
  };
  
  struct B {
  public:
      int m1;
  private:
      int m2;
  };
  
  struct C {
  private:
      int m1;
      int m2;
  };
  
  int main()
  {
      std::cout &lt;&lt; std::boolalpha;
      std::cout &lt;&lt; std::is_pod&lt;A&gt;::value &lt;&lt; '\n'; // true
      std::cout &lt;&lt; std::is_pod&lt;B&gt;::value &lt;&lt; '\n'; // false
      std::cout &lt;&lt; std::is_pod&lt;C&gt;::value &lt;&lt; '\n'; // true
  }
  </code></pre>
  
  <p>The 3 structs all look like POD to me. But apparently <code>struct B</code> is not.
  I don't understand why. To me, they all have a trivial constructor, move and copy operator. Destructor is certainly trivial too.</p>
  
  <p>I blame it on using 2 access specifiers, but I can't find information about this.</p>