On Saturday, 4 November 2023 at 13:51:20 UTC, Dadoum wrote:
On Saturday, 4 November 2023 at 13:45:56 UTC, Emmanuel Danso Nyarko wrote:
[...]

There is a syntax disagreement here that's why the D compiler is instantly stopping you from doing any symbol generated interaction with string in C++ interop. C++ doesn't know 'string' and C++ mangles with parameters and so passing string will make string get involved with the symbol generation and since string(std::string) in C++ is a template library, the D compiler stops you from engaging with 'string'

I don't think it's related to the existence of std::string at all since all dynamic array types are forbidden.

```d
extern (C++) void hello(ubyte[] arg) {
        import std.stdio;
        writeln(arg);
}
```

also fails to compile while this works:

```d
extern (C) void hello(ubyte[] arg) {
        import std.stdio;
        writeln(arg);
}
```

Here too you will get the same error, cannot be mapped to C++. C++ mangles dynamic arrays as pointer arrays(uses the 'P' symbol), which is supported by D for interfacing with C. Another disagreement here using it in c++ interop. Hence will not compile. Once again, I think the compiler team will be the best to give you what you're looking for.

Reply via email to