Module dmd.nspace
A scoped C++ namespace symbol
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
The first form is an attribute and only affects mangling, and is implemented
in dmd
.
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);
}
Hence the 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.
See Also
https://github.com/dlang/dmd/pull/10031
Documentation
https://dlang.org/phobos/dmd_nspace.html
Coverage
https://codecov.io/gh/dlang/dmd/src/master/src/dmd/nspace.d
Classes
Name | Description |
---|---|
Nspace
|