07/11/05 12:39:25
>>658
考えてみてもintで止まるということがよく分からんかった。
A!(int)はA!(A!(int))型戻り値の関数を持ち、
そのA!(A!(int))型はA!(A!(A!(int))))型戻り値の関数を持ち、…
となるように思える。(intから始まって、止まらない)
A!(int)の実体化中にA!(A!(int))を実体化しようとすると、
無限リストよろしく永遠に型の実体化が終了しないんじゃなかろうか。
で、A!(A!(int))の実体化のタイミングをA!(int)の定義後にしようと思って
struct A(T){
T t;
A!(TA) f(TA=A!(T))(){
A!(TA) a;
return a;
}
}
としてみたけど、それでもコンパイラ様は再帰展開だとおっしゃる。
で、小手先の変更として f(TA=A!(T))() を f(TA=typeof(this)) と変えてみたら
dmdがsemantic3でオチタ\(^o^)/