mixin template had error by calling shared function
via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Dec 10 02:34:24 PST 2014
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)
More information about the Digitalmars-d-learn
mailing list