[Issue 3180] Covariance of delegates/function pointers
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Sep 17 09:05:15 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3180
--- Comment #15 from Haruki Shigemori <rayerd.wiz at gmail.com> 2011-09-17 09:04:50 PDT ---
import std.stdio;
class Base {}
class Derived : Base {}
class X
{
Base foo() { return new Base; }
}
class Y : X
{
Derived foo() { return new Derived; }
}
void main()
{
// Covariance is good
{
Base delegate() f = delegate Derived() { return new Derived; };
writefln("delegate convariance is <%s>", f().toString() == "a.Derived"
? "OK" : "NG");
}{
static Derived fp() { return new Derived; }
Base function() f = &fp;
writefln("function pointer covariance is <%s>", f().toString() ==
"a.Derived" ? "OK" : "NG");
}
// Contravariance is BAD
{
auto c = new class { void foo(Base){} };
// GOOD
void delegate(Base) f = &c.foo;
f(new Base);
f(new Derived);
// BAD
void delegate(Derived) g = &c.foo;
g(new Derived);
}
}
a.d(33): Error: cannot implicitly convert expression (&c.foo) of type void
delegate(Base) to void delegate(Derived)
---
Why is "Status" "RESOLVED-FIXED"?
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list