私は次のコードを持っています:
import std.stdio;
int main(string[] args)
{
int[3] my_array = [1, 2];
return 0;
}
これは正常にコンパイルされ、実行時に中止され、次のエラーが発生します。
arrays_init
object.Exception@src/rt/arraycat.d(31): lengths don't match for array copy
----------------
arrays_init(_Dmain+0x64) [0x416bbc]
arrays_init(extern (C) int rt.dmain2.main(int, char**).void runMain()+0x1c) [0x418c5c]
arrays_init(extern (C) int rt.dmain2.main(int, char**).void tryExec(scope void delegate())+0x2a) [0x4185d6]
arrays_init(extern (C) int rt.dmain2.main(int, char**).void runAll()+0x3b) [0x418ca3]
arrays_init(extern (C) int rt.dmain2.main(int, char**).void tryExec(scope void delegate())+0x2a) [0x4185d6]
arrays_init(main+0xd1) [0x418561]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f60bc41d30d]
配列リテラルに3つの項目がある場合、これは正常に実行されるため、配列リテラルは静的配列のサイズと一致する必要があるようです。しかし、両方のサイズはコンパイル時に計算できるため、これでコンパイルエラーが発生することはありませんか?