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)