November 05, 2011 [Issue 6895] New: std.traits.isCovariantWith not works for function, function pointer and delegate | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=6895 Summary: std.traits.isCovariantWith not works for function, function pointer and delegate Product: D Version: D2 Platform: Other OS/Version: Windows Status: NEW Keywords: patch Severity: normal Priority: P2 Component: Phobos AssignedTo: nobody@puremagic.com ReportedBy: rayerd.wiz@gmail.com --- Comment #0 from Haruki Shigemori <rayerd.wiz@gmail.com> 2011-11-05 09:25:56 PDT --- diff --git a/std/traits.d b/std/traits.d index 1b02d12..d24f1fc 100644 --- a/std/traits.d +++ b/std/traits.d @@ -2345,7 +2345,9 @@ static assert(isCovariantWith!(typeof(C.clone), typeof(J.clone))); -------------------- */ template isCovariantWith(F, G) - if (is(F == function) && is(G == function)) + if (is(F == function) && is(G == function) || + is(F == delegate) && is(G == delegate) || + isFunctionPointer!F && isFunctionPointer!G) { static if (is(F : G)) enum isCovariantWith = true; @@ -2471,6 +2473,15 @@ unittest static assert(isCovariantWith!(BaseA.test, BaseA.test)); static assert(isCovariantWith!(DerivA_1.test, DerivA_1.test)); static assert(isCovariantWith!(DerivA_2.test, DerivA_2.test)); + + // function, function pointer and delegate + J function() derived_function; + I function() base_function; + J delegate() derived_delegate; + I delegate() base_delegate; + static assert(isCovariantWith!(typeof(derived_function), typeof(base_function))); + static assert(isCovariantWith!(typeof(*derived_function), typeof(*base_function))); + static assert(isCovariantWith!(typeof(derived_delegate), typeof(base_delegate))); // scope parameter interface BaseB { void test( int, int); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation