title: Ambiguous overload accessing argument-less template functions with variadic parameters
body: <p>Yeah, the title can scare babies, but it's actually quite straightforward.</p>
  
  <p>I am trying to store a function pointer to a specialized template function, namely boost::make_shared (boost 1.41), as illustrated:</p>
  
  <pre><code>boost::shared_ptr&lt;int&gt; (*pt2Function)() = boost::make_shared&lt;int&gt;;
  </code></pre>
  
  <p>However, it won't compile (GCC 4.4.1) due to the fact that boost::make_shared has the following two specializations which the compiler can't tell apart in this context:</p>
  
  <pre><code>template&lt; class T &gt; boost::shared_ptr&lt; T &gt; make_shared()
  ...
  template&lt; class T, class... Args &gt; boost::shared_ptr&lt; T &gt; make_shared( Args &amp;&amp; ... args )
  </code></pre>
  
  <p>The error, for reference:</p>
  
  <pre><code>In function ‘int main()’:
  error: converting overloaded function ‘make_shared’ to type ‘class boost::shared_ptr&lt;int&gt; (*)()’ is ambiguous
  boost/smart_ptr/make_shared.hpp:100: error: candidates are: boost::shared_ptr&lt;X&gt; boost::make_shared() [with T = int]
  boost/smart_ptr/make_shared.hpp:138: error:                 boost::shared_ptr&lt;X&gt; boost::make_shared(Args&amp;&amp; ...) [with T = int, Args = ]
  </code></pre>
  
  <p>If I comment out the non-variadic variation, the code compiles fine.</p>
  
  <p>Does anyone know the proper syntax for resolving the ambiguity between two argument-less functions like this?</p>