Thread overview | ||||||
---|---|---|---|---|---|---|
|
March 16, 2018 interfacing c++ templates. Another c++-namespace issue? | ||||
---|---|---|---|---|
| ||||
Hi [template.cpp]: template<typename Type> void some_templated_function(); template<> void some_templated_function<int>() {} [main.d]: extern(C++) { void some_templated_function(Type)(); } void main() { some_templated_function!int; } compilation: g++ -c template_with_ns.cpp dmd main.d template.o this WORKS! :) BUT, now I put all c++ stuff into a namespace [template_with_ns.cpp]: namespace some_namespace { template<typename Type> void some_templated_function(); template<> void some_templated_function<int>() {} } [main_with_ns.d]: extern(C++, some_namespace) { void some_templated_function(Type)(); } void main() { some_templated_function!int; } DOES NOT compile undefined reference to `void some_templated_function<int>()' nm main_with_ns.o _Z23some_templated_functionIiEvv nm template_with_ns.o _ZN14some_namespace23some_templated_functionIiEEvv It seems like dmd doesn't care about the namespace of the template. Can someone confirm this as a bug? or am I doing something terrible wrong? :) When I retry this with gdc it doesn't compile. Neither with namespace nor without: nm template.o: _Z23some_templated_functionIiEvv main.o: _ZN23some_templated_functionIiE23some_templated_functionEv The more I work with D, interfacing C++, the more I start to know "mangling" :D Have fun Markus |
March 16, 2018 Re: interfacing c++ templates. Another c++-namespace issue? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Markus | On 3/16/2018 11:57 AM, Markus wrote: > It seems like dmd doesn't care about the namespace of the template. > Can someone confirm this as a bug? or am I doing something terrible wrong? :) Might check that this https://issues.dlang.org/show_bug.cgi?id=17772 is not the issue. See my comment in https://github.com/dlang/dmd/pull/7906 : "Fixing the T_ mangling is much more problematic, I don't know how to do that yet. This namespace issue is independent, so it is convenient to do it separately." |
March 16, 2018 Re: interfacing c++ templates. Another c++-namespace issue? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | On 3/16/18 3:32 PM, Walter Bright wrote: > On 3/16/2018 11:57 AM, Markus wrote: >> It seems like dmd doesn't care about the namespace of the template. >> Can someone confirm this as a bug? or am I doing something terrible wrong? :) > > Might check that this https://issues.dlang.org/show_bug.cgi?id=17772 is not the issue. See my comment in https://github.com/dlang/dmd/pull/7906 : > > "Fixing the T_ mangling is much more problematic, I don't know how to do that yet. This namespace issue is independent, so it is convenient to do it separately." There was another namespace issue recently found: https://issues.dlang.org/show_bug.cgi?id=18582 But it looks like its different. When you compare: C++: _ZN14some_namespace23some_templated_functionIiEEvv D: _ZN23some_templated_functionIiE23some_templated_functionEv Something is wrong. Instead of the namespace, you get "some_templated_function" as the namespace! -Steve |
March 16, 2018 Re: interfacing c++ templates. Another c++-namespace issue? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Fri, Mar 16, 2018 at 03:53:00PM -0400, Steven Schveighoffer via Digitalmars-d wrote: [...] > There was another namespace issue recently found: > > https://issues.dlang.org/show_bug.cgi?id=18582 > > But it looks like its different. When you compare: > > C++: > _ZN14some_namespace23some_templated_functionIiEEvv > > D: _ZN23some_templated_functionIiE23some_templated_functionEv > > Something is wrong. Instead of the namespace, you get "some_templated_function" as the namespace! [...] I wonder if the problem is caused by wrongly treating the template function as a D eponymous template instead of a C++ template? T -- Don't drink and derive. Alcohol and algebra don't mix. |
Copyright © 1999-2021 by the D Language Foundation