title: std::pair constructor interface
body: <p>It's actually a general question about interface design, but it's easier for me to just take <code>std::pair</code> as an example:</p>
  
  <pre><code>template &lt;class T1, class T2&gt;
  struct pair {
      ...
      pair(const T1&amp; x, const T2&amp; y);
      template&lt;class U, class V&gt; pair(U&amp;&amp; x, V&amp;&amp; y);
      ...
  };
  </code></pre>
  
  <p>So we can see there are two overloads that both take 2 arguments to initialize the 2 members of the pair.  My question is, what is the benefit of providing the first one while the second one is available?  Are there any types of arguments that can only be passed to the first one but not the second one?</p>
  
  <p>(Let's just put aside the standard library's consideration for backward compatibility for a while, and discuss the interface design as a general question.)</p>