title: Excluding std::pair constructors that use explicit construction
body: <p>Following on from <a href="https://stackoverflow.com/questions/8135555/how-to-avoid-implicit-calling-of-a-one-parameter-contructor-in-stdpair/8137176#8137176">this answer</a>, it seems these constructors:</p>
  
  <pre><code>template&lt;class U, class V&gt; pair(pair&lt;U, V&gt;&amp;&amp; p); 
  template&lt;class U, class V&gt; pair(const pair&lt;U, V&gt;&amp; p);
  </code></pre>
  
  <p>are forbidden from participating in overload resolution when they would require an explicit conversion.</p>
  
  <p>From C++11 (§20.3.2, n3290):</p>
  
  <blockquote>
    <p>Remark: This constructor shall not participate in overload resolution unless U is implicitly convertible to first_type and V is implicitly convertible to second_type. </p>
  </blockquote>
  
  <p>An interesting <a href="http://definedbehavior.blogspot.com/2011/07/improving-conversions-of-stdpair-s.html" rel="nofollow noreferrer">SFINAE workaround</a> has been suggested, but this digresses from the text of the standard.</p>
  
  <p>How can a conforming implementation possibly exclude this from overload resolution, short of some special internal compiler magic? I.e. can an implementation do this and can I duplicate it for my own type perhaps? There doesn't seem to be anyway of conforming with this! Is it a hangover from the removal of concepts from C++11?</p>
  
  <p>I did wonder about using a private constructor to do the SFINAE part and delegating from the public constructor, but it doesn't look like constructor delegation participates in SFINAE in such a way as to make that work.</p>