What exactly is a “Special Class”?
From the Roslyn source code, it looks like a list of hardcoded types in isValidConstraintType: switch (type.SpecialType) { case SpecialType.System_Object: case SpecialType.System_ValueType: case SpecialType.System_Enum: case SpecialType.System_Delegate: case SpecialType.System_MulticastDelegate: case SpecialType.System_Array: // “Constraint cannot be special class ‘{0}'” Error(diagnostics, ErrorCode.ERR_SpecialTypeAsBound, syntax, type); return false; } isValidConstraintType in GitHub (updated with new types) IsValidConstraintType is Roslyn Source … Read more