[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