Possible bug with mixin template functions and variadic params
Jarrett Billingsley
kb3ctd2 at yahoo.com
Thu Jul 24 10:09:12 PDT 2008
"Derek Ney" <derek at hipgraphics.com> wrote in message
news:g69vng$1lt6$1 at digitalmars.com...
>I posted the following the the language forum thinking perhaps I was doing
>something wrong, but it seems that this may be a bug in the 2.014 compiler.
>Here is what I posted:
>
> I am trying to create a set of methods that take a variable number of
> arguments (at compile time). I would have liked to have used template
> functions to do that, but I need the functions to be virtual, and template
> functions cannot be virtual. So I thought I would try to use a mixin of a
> variadic template function. But I am getting a weird compiler error with
> my simple test program. Here is the test program:
>
> 1 import std.stdio;
> 2
> 3 template TCALL(ARGS...)
> 4 {
> 5 void makecall(ARGS args)
> 6 {
> 7 writefln("tcall...", args);
> 8 }
> 9 }
> 10
> 11 mixin TCALL!();
> 12 mixin TCALL!(int);
> 13 mixin TCALL!(int,int);
> 14
> 15
> 16 class Method
> 17 {
> 18 mixin TCALL!();
> 19 mixin TCALL!(int);
> 20 mixin TCALL!(int,int);
> 21 }
> 22
> 23 void main()
> 24 {
> 25 auto m = new Method;
> 26
> 27 m.makecall(0,1);
> 28 makecall(0,1);
> 29 }
>
> And when I compile with "Digital Mars D Compiler v2.014" I get this error:
>
> test6.d(27): Error: m.makecall is not a declaration
> test6.d(27): Error: function expected before (), not 1 of type int
>
> Can anyone explain what is going on here? It seems like it should work.
> Note that if you comment out line 27 and compile it compiles fine and runs
> producing the expected output:
>
> tcall...01
>
> -Thanks, Derek
Don't be shy about making bug reports :) If something doesn't seem right to
you -- file it! Even if it isn't a bug, you'll at least get (or have a
chance at getting) it looked at, responded to, and possibly changed.
More information about the Digitalmars-d-bugs
mailing list