title: Force function template/function overload for specific type
body: <p>I've got a function</p>
  
  <p><code>foo(int, int, int, int/long long/_int64/double/long double/char *, int ONLY IF previous char * - otherwise unneeded)</code></p>
  
  <p>Problem is, char * implementation is different than the value types due to requiring a string copy. Yes, this is an interface to old code, so i cannot use std::string :/</p>
  
  <p>Currently, I've got it as a template, and a function overload for char *, with the extra argument. However, all operations for the other types are also valid on char *, so if the caller forgets the last argument, the function silently matches the template instead, producing the wrong logic.</p>
  
  <p>Is there any way I can force the usage of the overload/use default arguments in function templates/something that will allow for a different signature (extra argument) for a specific type without silently matching a lesser signature?</p>
  
  <p>More:
  No access to C++11 yet, but I'm open to see a suggestion using it to help push for adoption.
  No boost, but same as above</p>
  
  <p>I have also tried </p>
  
  <p><code>return_type foo(int,int,int,typename std::enable_if&lt;!std::is_pointer&lt;T&gt;::value, T&gt;::type &amp; value2update)</code></p>
  
  <p>without any luck. It then claims that the call with a double &amp; parameter fails to match.</p>