Effect of `explicit` on static upcasting
<p>May an instance of a derived class be implicitly converted to an instance of its base class, when the only candidate constructor in the base class is marked <code>explicit</code>?</p>

<hr>

<p>I ran this:</p>

<pre><code>struct Base {
   Base() {}
   explicit Base(Base const&amp; b) {}
};

struct Derived : Base {};

int main() {
   Derived d;
   Base b = d;
}
</code></pre>

<p>And got this:</p>

<blockquote>
  <p>error: no matching function for call to 'Base::Base(Derived&amp;)'</p>
</blockquote>

<p>Then I ran this:</p>

<pre><code>struct Base {
   Base() {}
   Base(Base const&amp; b) {}
};

struct Derived : Base {};

int main() {
   Derived d;
   Base b = d;
}
</code></pre>

<p>And got no errors.</p>

<p>But I'm not entirely convinced that this test succeeds due to <code>explicit</code>ness rather than ctor synthesis. In particular, I didn't think that <code>explicit</code> cared about the type of arguments, but that it would force me to write <code>Base b = static_cast&lt;Base&gt;(d)</code> ... which I'm not doing in either case.</p>
