があると考えてくださいmoda.d
:
module moda;
private struct modb {};
そしてmodb.d
:
module modb;
private import moda;
そしてmodmain.d
:
module modmain;
static import moda;
static import modb;
void main() {
modb v; // should NOT compile, should it?
}
理由はわかりませんが、とmoda.modb
の両方に表示されますが、私が理解している限り、どちらもasとbeingとしてインポートされているため、表示されるべきではありません。それともすべきですか?私はdmdバグに遭遇しましたか、それとも私が理解していなかった計画された動作ですか?modmain
modb
moda
static
moda.modb
private
Update1:バグが複製される状況を特定するために、いくつかのテストを実行しました。
1 列目はimport moda
、2 列目はimport modb
、3 列目は構造体名として使用される識別子です。そこにあるすべてのテストはコンパイルに失敗するはずですが、一部はコンパイルされます。
凡例: D - 「インポート モジュール;」、S - 「静的インポート モジュール;」、N - インポートなし。
D;D;foobar - バグ #2830 によるコンパイル
S;D;foobar - 期待どおりに失敗する
N;D;foobar - 期待どおりに失敗する
D;S;foobar - バグ #2830 によるコンパイル
S;S;foobar - 期待どおりに失敗する
N;S;foobar - 期待どおりに失敗する
D;N;foobar - バグ #2830 によるコンパイル
S;N;foobar - 期待どおりに失敗する
N;N;foobar - 期待どおりに失敗する
D;D;moda - バグ #2830 によるコンパイル
S;D;moda - コンパイルしないでください
N;D;moda - コンパイルしないでください
D;S;moda - バグ #2830 によるコンパイル
S;S;moda - コンパイルしないでください
N;S;moda - 期待どおりに失敗する
D;N;moda - バグ #2830 によるコンパイル
S;N;moda - コンパイルしないでください
N;N;moda - 期待どおりに失敗する
D;D;modb - バグ #2830 によるコンパイル
S;D;modb - コンパイルしないでください
N;D;modb - コンパイルしないでください
D;S;modb - バグ #2830 によるコンパイル
S;S;modb - コンパイルしないでください
N;S;modb - コンパイルしないでください
D;N;modb - バグ #2830 によるコンパイル
S;N;modb - 期待どおりに失敗する
N;N;modb - 期待どおりに失敗します
一部のモジュールの名前が公開されていないシンボルと同じ場合、保護レベルに関係なく公開されているようです。