次のコードを参照してください。
import core.vararg, std.stdio;
void main() {
foo(1);
}
void foo(...) {
va_list arguments;
for(int i; i<10; ++i) {
va_copy(arguments, _argptr);
writeln(arguments," ", va_arg!(int)(arguments));
}
}
出力:
7FFF61F21AE0 1
7FFF61F21AE0 0
7FFF61F21AE0 4387892
7FFF61F21AE0 0
7FFF61F21AE0 38
7FFF61F21AE0 1643256688
7FFF61F21AE0 4387915
7FFF61F21AE0 1
7FFF61F21AE0 27734032
7FFF61F21AE0 1005847240
ご覧のとおり、var_arg はガベージを生成しています。ただし、最初の呼び出しは常に正しい値を返します。
ここで何が問題なのですか?core.vararg のソース コードは非常に単純で、7FFF61F21AE0 の基になるデータを変更するものを見つけることができませんでした。