October 22

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

October 22

On Tuesday, 22 October 2024 at 10:50:22 UTC, f wrote:

>

std.cpp

#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