title: C++ non-static data member initializers, just a little bit confused
body: <p>I am a little bit confused about why the following code does what it does:</p>
  
  <pre><code>class Base
  {
  public:
      Base() = default;
      Base(const Base &amp;) =delete;
      Base &amp;operator=(const Base &amp;) = delete;
      Base(const char*) {}
  };
  
  class Holder
  {
  public:
      Holder() = default;
  private:
      // Base b = Base();
      Base b2 = {};
  };
  
  int main()
  {
      Holder h;
  }
  </code></pre>
  
  <p>in this incarnation, it compiles, however if I un-comment <code>Base b = Base();</code> it gives the following error:</p>
  
  <pre><code>main.cpp:15:17: error: use of deleted function 'Base::Base(const Base&amp;)'
     Base b = Base();
                   ^
  main.cpp:5:6: note: declared here
        Base(const Base &amp;) =delete;
        ^
  </code></pre>
  
  <p>and I am just unable to find in the standard why it tries to call the copy constructor for the <code>Base b = Base()</code> initializer, and why doesn't it call for the <code>Base b2 = {}</code> ... or is this just one of those little obscurities that is hidden in a few words in a paragraph somewhere?</p>
  
  <p>Can you please give a (short) explanation why this happens?</p>
  
  <p>(coliru: <a href="http://coliru.stacked-crooked.com/a/c02ba0293eab2ce5">http://coliru.stacked-crooked.com/a/c02ba0293eab2ce5</a> )</p>