title: Why std::overload instead of concepts/constexpr if in std::visit?
body: <p>I may be a bit confused about std::overloaded proposal and or concepts, but with my current understanding of both I have the following question:</p>
  
  <p>Why C++20 does not just conceptify/if constexprify std::visit so it knows what to do based on types of arguments passed to it.</p>
  
  <p>For example why can't we have std::visit that modifies it behavior based on concepts of arguments passed(all it requires is that functions go first, variants last).</p>
  
  <p>So for example both of these <code>visit</code>s accept 3 arguments but have different logic.</p>
  
  <pre><code>    std::variant&lt;int, double&gt; v1=4.7;
      std::variant&lt;bool, std::string&gt; v2=false;
      // calls lambda that is a better fit(double one)
      std::visit([](int&amp; a){std::cout&lt;&lt; sizeof (a);},[](double&amp; a){std::cout &lt;&lt; a;} , v1); 
      // calls lambda on variant v1 and then variant v2
      std::visit([](auto&amp; a){}, v1, v2); 
  </code></pre>