title: Why won't a class derived from an abstract class with a where clause cast to its lowest common class
body: <p>Some code to replicate the issue:</p>
  
  <pre><code>using System;
  
  public abstract class Response { }
  public abstract class Request&lt;T&gt; where T : Response { }
  public class LoginResponse : Response { }
  public class LoginRequest : Request&lt;LoginResponse&gt; { }
  
  public class Program
  {
      static void Main(string[] args)
      {
          LoginRequest login = new LoginRequest();
  
  
          /* Error: Cannot implicitly convert type 'LoginRequest' to 'Request' */
          Request&lt;Response&gt; castTest = login;
  
  
          /* No Error */
          Request&lt;LoginResponse&gt; castTest2 = login;
      }
  }
  </code></pre>
  
  <p>As far as i can tell the LoginRequest class is a Request&lt;Response&gt; because is inherits from Request&lt;T&gt; and LoginResponse inherits from Response so can anybody enlighten me as to why i get the compiler error?</p>
  
  <p>note: i have also tried an explicit cast</p>