mixin template had error by calling shared function

Rikki Cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Dec 10 01:41:41 PST 2014


On 10/12/2014 10:10 p.m., Vlasov Roman wrote:
> I have this code
>
> import std.stdio;
>
> mixin template Template(void function() func1, void function() func2) {
>
>      void     to() {
>          func1();
>          func2();
>      }
> };
>
> class SomeClass {
>      mixin Template!(&func, &func23);
>
>      void func() {
>          writeln("First function!");
>      }
>
>      void func23() {
>          writeln("First function!");
>      }
>
>      void toTemplate() {
>          to();
>      }
> }
>
> void main() {
>      SomeClass a = new SomeClass();
>
>      a.toTemplate();
> }
>
> After running the program give me SIGSEGV in func23();
>
> Terminal with gdb:
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x0000000000428352 in invariant._d_invariant(Object) ()
> (gdb) up
> #1  0x00000000004257f7 in main.SomeClass.func23() ()
>
>
> Manjaro Linux 0.9.0 x86_64
> dmd 2.066
> Kernel 3.14.4

Ugh, that's a compiler bug.
You should not be able to pass in delegates as function pointers to a 
mixin template.

A better way would be to pass in the names of the methods into the mixin 
template and then use string mixin's to call the methods.


More information about the Digitalmars-d-learn mailing list