www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - interfacing cpp

reply f <f abc.com> writes:
std.cpp
--
#include \<vector>
#include \<iostream>
#include \<string>

     using namespace std;
     void a(string a)
     {
     		  cout\<\<" hello " \<\<a\<\<endl;
     }

s.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
Oct 22
parent Salih Dincer <salihdb hotmail.com> writes:
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 79
Oct 22