title: enable_if to Add a function parameter that has a default argument?
body: <p>I can't understand the second scenario presented <a href="https://msdn.microsoft.com/en-us/library/ee361639.aspx" rel="nofollow">here</a>. It says:</p>
  
  <blockquote>
    <p>•Scenario 2: Adding a function parameter that has a default argument:</p>
  </blockquote>
  
  <pre><code>template &lt;your_stuff&gt; your_return_type_if_present
  yourfunction(args, enable_if_t&lt;your condition, FOO&gt; = BAR) {
      // ...
  }
  </code></pre>
  
  <blockquote>
    <p>Scenario 2 leaves the parameter unnamed. You could say <code>::type Dummy = BAR</code>, but the name <em>Dummy</em> is irrelevant, and giving it a name is likely to trigger an <em>unreferenced parameter</em> warning. You have to choose a <code>FOO</code> function parameter type and <code>BAR</code> default argument. You could say <code>int</code> and <code>0</code>, but then users of your code could accidentally pass to the function an extra integer that would be ignored. Instead, we recommend that you use <code>void **</code> and either <code>0</code> or <code>nullptr</code> because almost nothing is convertible to <code>void **</code>:</p>
  </blockquote>
  
  <pre><code>template &lt;your_stuff&gt; your_return_type_if_present 
  yourfunction(args, typename enable_if&lt;your_condition, void **&gt;::type=nullptr) {
   // ...
  }
  </code></pre>
  
  <p>If scenario 2 leaves the parameter unnamed then in what can it be used?
  Is there a way to make a code like this work with <code>enable_if</code>?</p>
  
  <pre><code>enum otype {oadd,omull};
  template&lt;otype o&gt;
  int add(int num1, std::enable_if&lt;o == oadd, int&gt;::type int= num2)
  {
      if (o == omull) return num1 * num1;
      if (o == oadd ) return num1 + num2;
   }
  </code></pre>