title: Non-deduced context like 'boost::mpl::identity<T>::type' in standard library?
body: <p>Cosider the following example I digged up <a href="https://stackoverflow.com/questions/26885239/whats-the-point-of-boostmplidentityttype-here">here on StackOverflow</a></p>
  
  <pre><code>  template&lt;typename T, typename Pred&gt; 
    T const &amp; clamp ( T const&amp; val, 
      typename boost::mpl::identity&lt;T&gt;::type const &amp; lo, 
      typename boost::mpl::identity&lt;T&gt;::type const &amp; hi, Pred p )
    {
  //    assert ( !p ( hi, lo ));    // Can't assert p ( lo, hi ) b/c they might be equal
      return p ( val, lo ) ? lo : p ( hi, val ) ? hi : val;
    } 
  </code></pre>
  
  <p>where <code>typename boost::mpl::identity&lt;T&gt;::type</code> prevents the compiler from deducing T based on the type of the second and the third argument. This comes very handy for me, but I cannot use the <code>Boost Library</code> (please do not give me a hard time on that, as it is already a hard time because of that).</p>
  
  <p>The question is now is something equivallent in the standard library directly which I just cannot find?</p>