title: Does make_shared ignore explicit specifier?
body: <p>Consider the following example:</p>
  <pre><code>#include &lt;iostream&gt;
  #include &lt;memory&gt;
  
  struct A
  {
      explicit A(int x) 
      { 
          std::cout &lt;&lt; x &lt;&lt; std::endl;
      }
  };
  
  void Foo(A ) {}
  
  std::shared_ptr&lt;A&gt; Foo2(int x)
  {
      // why does this work?
      return std::make_shared&lt;A&gt;(x);
  }
  
  int main()
  {
      A a(0);
      Foo(a);
      // Foo(1); does not compile
      Foo2(2);
  }
  </code></pre>
  <p>I have a <code>class A</code> with an explicit marked constructor so that it doesn't convert from <code>int</code> to the <code>class A</code>  implicitly. But in a call to <code>std::make_shared</code> I can call and create this class by only passing an <code>int</code>. Why is that possible and is there something wrong in the way how I do it?</p>