www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [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



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: -------
Nov 05 2011