interfacing cpp

Salih Dincer salihdb at hotmail.com
Tue Oct 22 11:13:20 UTC 2024


On Tuesday, 22 October 2024 at 10:50:22 UTC, f wrote:
> std.cpp
> --
> ```c
> #include \<vector>
> #include \<iostream>
> #include \<string>
>
>     using namespace std;
>     void a(string a)
>     {
>         cout\<\<" hello " \<\<a\<\<endl;
>     }
>
> s.d
> --
> ```d
> module s;
>
> import core.stdcpp.string;
>
>     extern(C++)
>     {
>         final void a(basic_string!char a);
>     }
>
>     main.d
>     --
>     void main()
>     {
>         import s;
>         import core.stdcpp.string;
>         auto i=basic_string!char("hello");
>         a(i);
>     }
> ```
> i've read the interfacing cpp on documentation,
> ok then the compiler mesasge for this
>
> libstdc++ std::__cxx11::basic_string is not yet supported; the 
> struct contains an interior pointer which breaks D move 
> semantics!
>
> but with options AA="-D_GLIBCXX_USECXX11_ABI=0" on g++ ,
> and BB="-version=_GLIBCXX_USE_CXX98_ABI" on dmd the message is :
>
> Error: undefined reference to `a(std::string)`
>
> how to solve the, std:string , std:vector,  std:optional ?
>
> is there any article / links on general interfacing c++ problem 
> solving ?
>
> thanks

In C++, template classes and some STL constructs (e.g. 
std::basic_string) cannot be directly transferred to D because 
the compile-time mechanisms for templates in C++ are different 
from D.

SDB at 79



More information about the Digitalmars-d-learn mailing list