[Issue 2512] New: ParameterTypeTuple do not support opCall

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Dec 13 11:54:25 PST 2008


http://d.puremagic.com/issues/show_bug.cgi?id=2512

           Summary: ParameterTypeTuple do not support opCall
           Product: D
           Version: 2.021
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P3
         Component: Phobos
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: rayerd.wiz at gmail.com


The std.traits.ParameterTypeTuple do not support a class object/type and a
struct object/type within opCall.
The ParameterTypeTuple is recommended to be changed like this. 

>>>>>>>>>>>>>>>>>>>>>>
--- traits.d    Tue Nov 25 00:24:50 2008
+++ traits.d.new        Sun Dec 14 04:28:31 2008
@@ -93,7 +93,12 @@
  */
 template ParameterTypeTuple(alias dg)
 {
-    alias ParameterTypeTuple!(typeof(dg)) ParameterTypeTuple;
+    static if (is(dg == class))
+       alias ParameterTypeTuple!(dg.opCall) ParameterTypeTuple;
+    else static if (is(dg == struct))
+       alias ParameterTypeTuple!(dg.opCall) ParameterTypeTuple;
+    else
+       alias ParameterTypeTuple!(typeof(dg)) ParameterTypeTuple;
 }

 /** ditto */
<<<<<<<<<<<<<<<<<<<<<<

import std.traits;
class C {
    int opCall(int,double){return 1;}
}
struct S {
    int opCall(int,long){return 1;}
}
void main() {
    static assert(is(ParameterTypeTuple!(C)[0] == int));
    static assert(is(ParameterTypeTuple!(S)[1] == long));
    C c;
    static assert(is(ParameterTypeTuple!(c)[1] == double));
    S s;
    static assert(is(ParameterTypeTuple!(s)[0] == int));
}


-- 



More information about the Digitalmars-d-bugs mailing list