title: Compiler error with std::enable_if when substitution fails
body: <p>In the below code example, the second line</p>
  <pre><code>std::cout &lt;&lt; &quot;is_even (4.4) = &quot; &lt;&lt; std::boolalpha &lt;&lt; is_even(4.4);
  </code></pre>
  <p>causes compiler failures because no proper substitution is found.
  If there is an error, then how is this SFINAE? I thought std::enable_if is kind of SFINAE and the acronym means no failure if substitution can't be done. Where I am misinterpreting?</p>
  <pre><code>#include &lt;iostream&gt;
  #include &lt;type_traits&gt;
  
  template&lt;class T, class = std::enable_if_t&lt;std::is_integral_v&lt;T&gt;&gt;&gt;
  bool is_even(T value)
  {
      return ((value % 2) == 0);
  }
      
  int main()
  {
      std::cout &lt;&lt; &quot;is_even (4) = &quot; &lt;&lt; std::boolalpha &lt;&lt; is_even(4);
      std::cout &lt;&lt; &quot;is_even (4.4) = &quot; &lt;&lt; std::boolalpha &lt;&lt; is_even(4.4);
  }
  </code></pre>
  <p>Please don't say what i expect in this situation to happen. I am just trying to see how should i see SFINAE here?</p>