dmd.nspace
A scoped C++ namespace symbol
Discussion
D supports the following syntax to declare symbol(s) as being part of a
C++ namespace:
extern (C++, "myNamespace") { /+ Symbols +/ } // String variant
extern (C++, SomeNamespace) { /+ Other symbols +/ } // Identifier variant
dmd.attrib
.
The second form introduces a named scope and allows symbols to be refered
to with or without the namespace name, much like a named template mixin,
and is implemented in this module.
extern (C++, Basket)
{
struct StrawBerry;
void swapFood (Strawberry* f1, Strawberry* f2);
}
void main ()
{
Basket.StrawBerry fruit1;
StrawBerry fruit2;
Basket.swapFood(fruit1, fruit2);
swapFood(fruit1, fruit2);
}
Nspace
symbol implements the usual ScopeDsymbol
semantics.
Note that it implies extern(C++)
so it cannot be used as a generic
named scope. Additionally, Nspace
with the same Identifier
can be
defined in different module (as C++ allows a namespace to be spread accross
translation units), but symbols in it should be considered
part of the same scope. Lastly, not all possible C++ namespace names
are valid D identifier.
License
Source: nspace.d
Documentation: https://dlang.org/phobos/dmd_nspace.html