<?xml version="1.0"?>
<ErrorDocumentation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ErrorName>CS0452</ErrorName>
  <Examples>
    <string>// CS0452: The type `ulong' must be a reference type in order to use it as type parameter `T' in the generic type or method `C&lt;T&gt;'
// Line: 10

public class C&lt;T&gt; where T : class
{
	public int this [params C&lt;ulong&gt;[] args] {
		set {}
	}
}

</string>
    <string>// CS0452: The type `int' must be a reference type in order to use it as type parameter `T' in the generic type or method `Program.M&lt;T&gt;(T, T)'
// Line: 8

class Program
{
	public static void M&lt;T&gt; (T item1, T item2 = null) where T : class
	{
		M (1);
	}
}</string>
    <string>// CS0452: The type `int' must be a reference type in order to use it as type parameter `T' in the generic type or method `C&lt;T&gt;'
// Line: 10

public class C&lt;T&gt; where T : class
{
}

class A
{
	public A (ref C&lt;int&gt; args)
	{
	}
}

</string>
    <string>// CS0452: The type `U' must be a reference type in order to use it as type parameter `UU' in the generic type or method `B.Test&lt;UU&gt;(UU)'
// Line: 13

abstract class A&lt;T&gt;
{
	public abstract void Foo&lt;U&gt; (U arg) where U : T;
}

class B : A&lt;int&gt;
{
	public override void Foo&lt;U&gt; (U arg)
	{
		Test (arg);
	}
	
	void Test&lt;UU&gt; (UU a) where UU : class
	{
	}
}
</string>
    <string>// CS0452: The type `int' must be a reference type in order to use it as type parameter `T' in the generic type or method `TestClass&lt;T&gt;'
// Line: 23
using System;

public class TestClass&lt;T&gt; where T : class
{
	static public T meth()
	{
		return null;
	}

	static public T Value;
}			
	
public class Test
{
	public Test()
	{
	}
		
	static public void Main()
	{
		int i = TestClass&lt;int&gt;.meth();
		Console.WriteLine (i);
	}
}
</string>
    <string>// CS0452: The type `int' must be a reference type in order to use it as type parameter `T' in the generic type or method `A.Foo&lt;T&gt;(T, string)'
// Line: 18

class A
{
	static int Foo&lt;T&gt; (T a, string s) where T : class
	{
		return 1;
	}

	static int Foo&lt;T&gt; (T a, object y)
	{
		return 2;
	}

	public static void Main ()
	{
		A.Foo&lt;int&gt; (99, null);
	}
}
</string>
    <string>// CS0452: The type `int' must be a reference type in order to use it as type parameter `T' in the generic type or method `Foo.Test&lt;T&gt;(ref T)'
// Line: 14
public class Foo
{
	public static void Test&lt;T&gt; (ref T t)
		where T : class
	{ }
}

public class C {
	public static void Main ()
	{
		int i = 0;
		Foo.Test&lt;int&gt; (ref i);
	}
}
</string>
    <string>// CS0452: The type `int' must be a reference type in order to use it as type parameter `T' in the generic type or method `TestClass&lt;T&gt;'
// Line: 23
using System;

public class TestClass&lt;T&gt; where T : class
{
	static public T meth()
	{
		return null;
	}

	static public T Value;
}			
	
public class Test
{
	public Test()
	{
	}
		
	static public void Main()
	{
		int j = TestClass&lt;int&gt;.Value;
		Console.WriteLine (j);
	}
}
</string>
    <string>// CS0452: The type `int' must be a reference type in order to use it as type parameter `T' in the generic type or method `C&lt;T&gt;'
// Line: 10

public class C&lt;T&gt; where T : class
{
}

delegate C&lt;int&gt; D ();
</string>
    <string>// CS0452: The type `int' must be a reference type in order to use it as type parameter `T' in the generic type or method `C&lt;T&gt;'
// Line: 10

public class C&lt;T&gt; where T : class
{
}

delegate void D (C&lt;int&gt; arg);
</string>
    <string>// CS0452: The type `Foo' must be a reference type in order to use it as type parameter `T' in the generic type or method `MyObject&lt;T&gt;'
// Line: 13
public class MyObject&lt;T&gt;
	where T : class
{ }

struct Foo
{ }

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

	static void Main ()
	{ }
}
</string>
  </Examples>
</ErrorDocumentation>