<?xml version="1.0"?>
<ErrorDocumentation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ErrorName>CS0311</ErrorName>
  <Examples>
    <string>// CS0311: The type `B' cannot be used as type parameter `T' in the generic type or method `Foo&lt;T&gt;'. There is no implicit reference conversion from `B' to `A'
// Line: 19

public class Foo&lt;T&gt;
	where T : A
{
}

public class A
{
}

public class B
{
}

class X
{
	Foo&lt;B&gt; foo;

	static void Main ()
	{
	}
}
</string>
    <string>// CS031: The type `B' cannot be used as type parameter `T' in the generic type or method `Foo&lt;T&gt;'. There is no implicit reference conversion from `B' to `I'
// Line: 21

public class Foo&lt;T&gt;
	where T : A, I
{
}

public interface I
{ }

public class A
{ }

public class B : A
{ }

class X
{
	Foo&lt;B&gt; foo;

	static void Main ()
	{
	}
}
</string>
    <string>// CS0311: The type `B' cannot be used as type parameter `T' in the generic type or method `Foo&lt;T&gt;'. There is no implicit reference conversion from `B' to `A'
// Line: 35
using System;

public class Foo&lt;T&gt;
	where T : A
{
	public void Test (T t)
	{
		Console.WriteLine (t);
		Console.WriteLine (t.GetType ());
		t.Hello ();
	}
}

public class A
{
	public void Hello ()
	{
		Console.WriteLine ("Hello World");
	}
}

public class B
{
	public static implicit operator A (B b)
	{
		return new A ();
	}
}

class X
{
	Foo&lt;B&gt; b;

	static void Main ()
	{
	}
}
</string>
    <string>// CS0311: The type `B&lt;int&gt;' cannot be used as type parameter `X' in the generic type or method `C&lt;X&gt;'. There is no implicit reference conversion from `B&lt;int&gt;' to `D&lt;B&lt;int&gt;&gt;'
// Line: 3
class A : C&lt;B&lt;int&gt;&gt; {}
class B&lt;X&gt; {}
interface C&lt;X&gt; where X : D&lt;X&gt; {}
interface D&lt;X&gt; {}
</string>
    <string>// CS0311: The type `object' cannot be used as type parameter `U' in the generic type or method `G&lt;C&gt;.Method&lt;U&gt;()'. There is no implicit reference conversion from `object' to `C'
// Line: 9

public class C
{
	public static void Main ()
	{
		var mc = new G&lt;C&gt; ();
		mc.Method&lt;object&gt; ();
	}
}

public class G&lt;T&gt; where T : C
{
	public void Method&lt;U&gt; () where U : T
	{
	}
}
</string>
  </Examples>
</ErrorDocumentation>