Specifying C++ symbols in C++ namespaces
Daniel Murphy
yebbliesnospam at gmail.com
Thu Apr 3 20:11:45 PDT 2014
"Andrei Alexandrescu" wrote in message
news:lhkebg$1i1p$1 at digitalmars.com...
>>
>> extern (C++) template nspace() {
>> int foo();
>> }
>
> This is really ugly and complicated.
>
> I don't quite see how one is ugly and complicated and the other is...
> pretty and simple? Anyhow de gustibus.
Stuff inside the template will only be instantiated when used. That's fine
when it's just a prototype of a C++ function to be called from D, but much
less useful when the implementation is in D and the use is from C++.
It can conflict with the eponymous template syntax - D would not be able to
tell the difference between a templated function and a function inside a
namespace with the same name.
It forces this organisation for all symbols that use C++ namespaces.
If you define functions in the same namespace in different modules the
template symbols will conflict and you will have to use fully-qualified
names.
On the other side, in D modules are used for symbol organisation. It's
powerful enough that you can get namespace::function to match
library.module.function (and I expect you can force use of the namespace
through clever use of static renamed imports).
The missing part is getting the mangling right, and a pragma is the least
intrusive way I can imagine to do that.
More information about the Digitalmars-d
mailing list