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