Strange template problem
Kirk McDonald
kirklin.mcdonald at gmail.com
Sat Jul 8 13:23:28 PDT 2006
I'm having some trouble with a very odd template problem. Take the
following code:
[test.d]
import std.stdio;
import ftype; // Daniel Keep's ftype module
// A function with default arguments
void foo(int i=20, char[] s="Monkey") {
writefln("foo: %s %s", i, s);
}
// A function with the same arguments and no defaults
void bar(int i, char[] s) {
writefln("bar: %s %s", i, s);
}
// A function that takes a function pointer and the minimum
// number of arguments the function can be called with, and
// calls it.
void Baz(fn_t, uint MIN_ARGS)(fn_t fn) {
static if (MIN_ARGS == 0)
fn();
else static if (MIN_ARGS == 1)
fn(10);
else static if (MIN_ARGS == 2)
fn(15, "Copper");
}
// A template function that takes a function alias and the
// minimum number of args it can be called with, and calls
// Baz
void Blah(alias Fn, uint MIN_ARGS = NumberOfArgs!(typeof(&Fn))) () {
alias typeof(&Fn) fn_t;
fn_t fn = &Fn;
Baz!(fn_t, MIN_ARGS)(fn);
}
void main() {
Blah!(bar); // Line 28
Blah!(foo, 0); // Line 29
}
$ build test
test.d(14): Error: expected 2 arguments, not 0
test.d(24): template instance test22.Baz!(void(*)(int i, char[] s),0u)
error instantiating
test.d(29): template instance test22.Blah!(foo,0) error instantiating
Curiously, this works if I comment out line 28:
$ build test
gcc test.o ftype.o -o test -m32 -lphobos -lpthread -lm
$ ./test
foo: 20 Monkey
It also works if I comment out line 29 instead:
$ build test
gcc test.o ftype.o -o test -m32 -lphobos -lpthread -lm
$ ./test
bar: 15 Copper
But if both lines are there together, it fails.
--
Kirk McDonald
Pyd: Wrapping Python with D
http://dsource.org/projects/pyd/wiki
More information about the Digitalmars-d
mailing list