Explicit default constructors in C++17 : <p>In C++17, empty tag types in the standard library now have default constructors which are marked <code>explicit</code>, and are also <code>= default</code>. For example, <a href="http://en.cppreference.com/w/cpp/utility/piecewise_construct_t" rel="noreferrer"><code>std::piecewise_construct_t</code></a> is now defined as</p>

<pre><code>struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
</code></pre>

<p>My question is simply, what is the reason for this change from C++14? What does an explicitly defaulted explicit default constructor (!) mean for an empty class?</p>

<p>(To avoid being marked as a dupe: <a href="https://stackoverflow.com/questions/2836939/purpose-of-explicit-default-constructors">this question</a> from 2010 asks about the purpose of explicit default constructors, but that was pre-C++11 and a long time ago now so things have likely changed. <a href="https://stackoverflow.com/questions/33522985/explicit-defaulted-default-constructor-and-aggregates">This question</a> is more recent, but the answer seems to suggest that aggregate initialization will be performed regardless of the presence of the defaulted constructor, so I'm curious as to the reason for this change in the latest standard.)</p>
