On Wednesday, 10 December 2014 at 09:41:43 UTC, Rikki Cattermole wrote:
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.

Better yet, try this:

mixin template Template(void delegate() func1, void delegate() func2)

Reply via email to