extern (C++,"myNamespace") {/+ Symbols +/ }// String variantextern (C++, SomeNamespace) {/+ Other symbols +/ }// Identifier variantThe first form is an attribute and only affects mangling, and is implemented indmd.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);}Hence theNspace symbol implements the usualScopeDsymbol semantics. Note that it impliesextern(C++) so it cannot be used as a generic named scope. Additionally,Nspace with the sameIdentifier 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.
Sourcenspace.d
Documentationhttps://dlang.org/phobos/dmd_nspace.html
Nspace:dmd.dsymbol.ScopeDsymbol;identExp;