title: the two constructors of pair is almost the same, why not generate build error?
body: <p>In pair's implemention, next two constructors only differ in the prefix: explicit. the two member template function is almost the same. </p>
  
  <pre><code>template&lt;class _Other1,
          class _Other2,
          enable_if_t&lt;conjunction_v&lt;
              is_constructible&lt;_Ty1, _Other1&gt;,
              is_constructible&lt;_Ty2, _Other2&gt;,
              is_convertible&lt;_Other1, _Ty1&gt;,
              is_convertible&lt;_Other2, _Ty2&gt;
          &gt;, int&gt; = 0&gt;
          constexpr pair(_Other1&amp;&amp; _Val1, _Other2&amp;&amp; _Val2)
              _NOEXCEPT_COND(is_nothrow_constructible_v&lt;_Ty1, _Other1&gt;
                  &amp;&amp; is_nothrow_constructible_v&lt;_Ty2, _Other2&gt;)
          : first(_STD forward&lt;_Other1&gt;(_Val1)),
                  second(_STD forward&lt;_Other2&gt;(_Val2))
          {   // construct from moved values
          }
  
      template&lt;class _Other1,
          class _Other2,
          enable_if_t&lt;conjunction_v&lt;
              is_constructible&lt;_Ty1, _Other1&gt;,
              is_constructible&lt;_Ty2, _Other2&gt;,
              negation&lt;conjunction&lt;
                  is_convertible&lt;_Other1, _Ty1&gt;,
                  is_convertible&lt;_Other2, _Ty2&gt;&gt;&gt;
          &gt;, int&gt; = 0&gt;
          constexpr explicit pair(_Other1&amp;&amp; _Val1, _Other2&amp;&amp; _Val2)
              _NOEXCEPT_COND(is_nothrow_constructible_v&lt;_Ty1, _Other1&gt;
                  &amp;&amp; is_nothrow_constructible_v&lt;_Ty2, _Other2&gt;)
          : first(_STD forward&lt;_Other1&gt;(_Val1)),
                  second(_STD forward&lt;_Other2&gt;(_Val2))
          {   // construct from moved values
          }
  </code></pre>
  
  <p>But when I write my test example as follows:</p>
  
  <pre><code>class A
  {
  public:
      template&lt;typename T1,typename T2&gt;
      A(T1 a,T2 b){}
  
      template&lt;typename T1,typename T2&gt;
      explicit A(T1 a,T2 b){}
  };
  </code></pre>
  
  <p>A build error comes out as:</p>
  
  <pre><code>Error   C2535   'A::A(T1,T2)': member function already defined
  </code></pre>
  
  <p>So why the result differs?</p>