title: Constrained function template vs un-constrained function template with different parameter type
body: <p>In the following two template functions, one tries to be more constrained:</p>
  <pre><code>template&lt;typename T&gt;
  concept SmallVar = (sizeof(T) &lt;= sizeof(int));
  
  void print(SmallVar auto t) { // 1
      std::cout &lt;&lt; t &lt;&lt; std::endl;
  }
  
  void print(const auto&amp; t) {   // 2 
      std::cout &lt;&lt; t &lt;&lt; std::endl;
  }
  </code></pre>
  <p>When called with an int, Clang and GCC differ:</p>
  <pre><code>int main() {
      print(6);  // clang accepts and prefers 1, gcc sees here ambiguity
  }
  </code></pre>
  <p>Which one is right?</p>
  <p>Code: <a href="https://godbolt.org/z/x71zjzoTa" rel="nofollow noreferrer">https://godbolt.org/z/x71zjzoTa</a></p>