D言語 Part10

972デフォルトの名無しさん
>>971
 >>516,519(あるいは521の4)についてなんですが、
//////// test.d ////////
module test;
public class TTemplateTest(T) {
this(T in_) {}
~this() {}
}
alias TTemplateTest!(char) TTTest_1; //これの情報がtest.objに格納されてほしい
//////// main.d ////////
import test;
int main(char[][] args) {
TTTest_1 aaa = new TTTest_1('a');
return 0;
}

> dmd test -c
> dmd main -c
> lib aaa.lib +test
> dmd main.obj aaa.lib
↑とすると、リンクエラーになります(test.d中で明示的に実体化されてるはずなのに、シンボルが見つからないと言われる)。
↓test.obj を aaa.lib に格納せず、直接 main.obj と結合するとエラーになりません。
> dmd main.obj test.obj

しかし、
> lib -l test.obj
↑でリストファイルを出力すると、test.objの中に実体化したテンプレートのシンボルそのものが存在していないことが分かります。
つまりlibファイルに格納するしないにかかわらず、コンパイルした時点で実体化したテンプレートの情報が消えてしまうようです。
殆ど書かれてることのまとめみたいになりましたが、一応うちの環境(Windows2000)では上のコードで問題が再現されます。
>>521の方の1,2,3については私には分かりません。すみませんが他の方お願いします。