[Mono-bugs] [Bug 691531] New: Weird variance and constraint bug.
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Tue May 3 16:57:49 EDT 2011
https://bugzilla.novell.com/show_bug.cgi?id=691531
https://bugzilla.novell.com/show_bug.cgi?id=691531#c0
Summary: Weird variance and constraint bug.
Classification: Mono
Product: Mono: Compilers
Version: SVN
Platform: Other
OS/Version: Other
Status: NEW
Severity: Normal
Priority: P5 - None
Component: C#
AssignedTo: msafar at novell.com
ReportedBy: rkumpera at novell.com
QAContact: mono-bugs at lists.ximian.com
Found By: ---
Blocker: ---
using System;
using System.Collections.Generic;
public class Driver {
static void Bla<T,U> () where T : U {
T[] ta = null;
IEnumerable<T> ita = ta;
IEnumerable<U> itu = ita;
}
static void Main() {
Bla<string, object> ();
}
}
There are 2 issues here:
-mcs compiles this to invalid code. IEnumerable<T> is not assignable to
IEnumerable<U>.
-csc fails to compile the above code due to:
test.cs(16,24): error CS0266: Cannot implicitly convert type
'System.Collections.Generic.IEnumerable<T>' to
'System.Collections.Generic.IEnumerable<U>'. An explicit conversion
exists (are you missing a cast?)
Looks like variance checks are generic constraint oblivious.
This this issue behind #687193.
What's more awesome is that this doesn't happen at reflection time:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
public class Driver {
static void Bla<T,U> () where T : U {
var t = typeof (T[]);
var it = typeof (IEnumerable<T>);
var iu = typeof (IEnumerable<U>);
Console.WriteLine (it.IsAssignableFrom (t));
Console.WriteLine (iu.IsAssignableFrom (t));
Console.WriteLine (iu.IsAssignableFrom (it));
}
static void Main() {
Bla<string, object> ();
}
}
This has to be statically respected since Bla<T,U> () where T : U can be
instantiated with <int,object> but IEnumerable<int> !> IEnumerable<object>.
AWESOME
--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the mono-bugs
mailing list