On Monday, 13 July 2020 at 09:34:35 UTC, zoujiaqing wrote:
I changed string to basic_string.

///  source/main.d
import std.stdio;
import core.stdcpp.string;

extern(C++)
{
    class Canvas
    {
        @disable this();

        static Canvas Create();

        basic_string!ubyte Foo();

        basic_string!ubyte Bar();
    };
}

void main()
{
        Canvas canvas = Canvas.Create();

        writeln(canvas.Foo());

        writeln(canvas.Bar());
}

Error ...

# dmd source/main.d Canvas.o -L-lstdc++ && ./main
[1]    49078 segmentation fault  ./main

Putting std::string support aside there is another issue in this example. D has virtual by default semantic unlike C++.

One possible segfault reason is that because it tries to call non existing virtual method.

Marking those D methods 'final' should fix linking issues. Also I can't remember if extern(C++) is implicitly propagated to class methods so I would put extern(C++) in class body just to be sure.

Reply via email to