Why can't we use strings in C++ methods?
Emmanuel Danso Nyarko
emmankoko519 at gmail.com
Sat Nov 4 14:30:47 UTC 2023
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.
More information about the Digitalmars-d-learn
mailing list