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