title: std::make_pair, c++11 and explicit template parameters
body: <p>Reedited: first of all, this is just a matter of curiosity, I do know, that std::pair or lots of other solutions could eradicate this issue.</p>
  
  <p>Can you tell me, what is exactly behind of this following problem? This code is a simple example working on c++03 and fails on c++11.</p>
  
  <pre><code>    std::pair&lt;int*,int**&gt; getsth(int* param)
      {
          return std::make_pair&lt;int*,int**&gt;(param, 0);
      }
  
      int main(int argc, char* argv[])
      {
          int* a = new int(1);
          std::pair&lt;int*,int**&gt; par = getsth(a);
          std::cout &lt;&lt; *par.first;
          return 0;
      }
  </code></pre>
  
  <p>I do know how to fix it to be compatible with both standards here, but it is annyoing me, that I don't know, what is exactly behind make_pair in this case.</p>
  
  <p>Thanks!</p>
  
  <p>edited: a compile error message from Coliru:</p>
  
  <pre><code>main.cpp: In function 'std::pair&lt;int*, int**&gt; getsth(int*)':
  main.cpp:8:47: error: no matching function for call to 'make_pair(int*&amp;, int)'
       return std::make_pair&lt;int*,int**&gt;(param, 0);
                                                 ^
  main.cpp:8:47: note: candidate is:
  In file included from /usr/local/include/c++/4.9.2/bits/stl_algobase.h:64:0,
                   from /usr/local/include/c++/4.9.2/bits/char_traits.h:39,
                   from /usr/local/include/c++/4.9.2/ios:40,
                   from /usr/local/include/c++/4.9.2/ostream:38,
                   from /usr/local/include/c++/4.9.2/iostream:39,
                   from main.cpp:1:
  /usr/local/include/c++/4.9.2/bits/stl_pair.h:276:5: note: template&lt;class _T1, class _T2&gt; constexpr std::pair&lt;typename std::__decay_and_strip&lt;_Tp&gt;::__type, typename std::__decay_and_strip&lt;_T2&gt;::__type&gt; std::make_pair(_T1&amp;&amp;, _T2&amp;&amp;)
       make_pair(_T1&amp;&amp; __x, _T2&amp;&amp; __y)
       ^
  /usr/local/include/c++/4.9.2/bits/stl_pair.h:276:5: note:   template argument deduction/substitution failed:
  main.cpp:8:47: note:   cannot convert 'param' (type 'int*') to type 'int*&amp;&amp;'
       return std::make_pair&lt;int*,int**&gt;(param, 0);
                                                 ^
  main.cpp:9:1: warning: control reaches end of non-void function [-Wreturn-type]
   }
  </code></pre>