[Issue 6895] New: std.traits.isCovariantWith not works for function, function pointer and delegate
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Nov 5 09:26:30 PDT 2011
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 at puremagic.com
ReportedBy: rayerd.wiz at gmail.com
--- Comment #0 from Haruki Shigemori <rayerd.wiz at 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: -------
More information about the Digitalmars-d-bugs
mailing list