title: Calling constructor overload when both overload have same signature
body: <p>Consider the following class,</p>
  
  <pre><code>class Foo
  {
      public Foo(int count)
      {
          /* .. */
      }
  
      public Foo(int count)
      {
          /* .. */
      }
  }
  </code></pre>
  
  <p>Above code is invalid and won't compile. Now consider the following code,</p>
  
  <pre><code>class Foo&lt;T&gt;
  {
      public Foo(int count)
      {
          /* .. */
      }
  
      public Foo(T t)
      {
          /* .. */
      }
  }
  
  static void Main(string[] args)
  {
      Foo&lt;int&gt; foo = new Foo&lt;int&gt;(1);
  }
  </code></pre>
  
  <p>Above code is valid and compiles well. It calls <em>Foo(int count)</em>.</p>
  
  <p>My question is, if the first one is invalid, how can the second one be valid? I know class <em>Foo&lt;T&gt;</em> is valid because T and int are different types. But when it is used like <em>Foo&lt;int&gt; foo = new Foo&lt;int&gt;(1)</em>, T is getting integer type and both constructor will have same signature right? Why don't compiler show error rather than choosing an overload to execute?</p>