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