英語版
このページの英語版を見る

dmd.nspace

スコープ付きC++名前空間シンボル
D は、シンボルが C++ 名前空間の一部であることを宣言する次の構文をサポートしている。 C++名前空間の一部であることを宣言する
extern (C++, "myNamespace") { /+ シンボル +/ }       // 文字列のバリエーション
extern (C++, SomeNamespace) { /+ 他のシンボル +/ } // 識別子のバリアント
最初の形式は属性で、マングリングにのみ影響する。 dmd.attrib で実装されている。 2番目の形式は、名前付きスコープを導入し、名前付きテンプレートミックスインのように、名前空間名の有無にかかわらずシンボルを参照できるようにする。 名前付きテンプレートミックスインのように、名前空間名の有無にかかわらずシンボルを参照できる、 で実装されている。
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 シンボルは通常のScopeDsymbol セマンティクスを実装している。
このシンボルはextern(C++) を意味するので、一般的な名前付きスコープとしては使えない。 名前付きスコープとして使うことはできない。さらに、同じIdentifier を持つNspace は、異なるモジュールで定義することができる。 同じ を持つ は、異なるモジュールで定義することができる(C++では、名前空間を翻訳単位にまたがって広げることができるため)。 しかし、その中のシンボルは同じスコープの一部とみなさなければならない。 同じスコープの一部と見なされる。最後に、すべてのC++名前空間名 は有効なD識別子ではない。
Authors:

出典 nspace.d

ドキュメンテーション https://dlang.org/phobos/dmd_nspace.html

class Nspace: dmd.dsymbol.ScopeDsymbol;
同上
Expression identExp;
セマンティック中に解決された名前空間識別子。