C++ non-static data member initializers, just a little bit confused : <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>
