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: bugzi...@digitalmars.com
        ReportedBy: rayerd....@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));
}


-- 

Reply via email to