title: C++ default initialization and value initialization: which is which, which is called when and how to reliably initialize a template-type member
body: <p>My question somewhat overlaps with <a href="https://stackoverflow.com/questions/3803153/what-are-primitive-types-default-initialized-to-in-c">this</a> and several other similar ones. Those have some great answers, but I've read them and I'm still confused, so please don't consider this question a duplicate.</p>
  
  <p>So, I have the following code:</p>
  
  <pre><code>class A {
      public: int _a;
  }
  
  void main()
  {
      A inst1;
      A* inst2 = new A;
      A* inst3 = new A();
  }
  </code></pre>
  
  <p><code>_a</code> is left uninitialized in <code>inst1</code> and <code>inst2</code> and is initialized to <code>0</code> in <code>inst3</code>. 
  Which initialization is called which, and why does the code work as it does? Please take into I account I don't have a C++ 03 standard at hand, but I have the last C++ 11 draft (I'm programming by '03 standard, though), so quotations of the '03 standard or references to '11 are most welcome.</p>
  
  <p>P. S. The original task behind this research was to correctly zeto-initialize a member of arbitrary template type <code>T</code>.</p>