This is borderline between enhancement and rejects-valid bug report. DMD 2.050 doesn't support this code: int[1][1] foo() { int[1][1] a; return a; } enum int[1][1] m1 = foo(); immutable int[1][1] m2 = foo(); void main() {} Errors generated: test.d(2): Error: Slice operation a[] = 0 cannot be evaluated at compile time test.d(5): Error: cannot evaluate foo() at compile time This code is very useful to initialize an enum/immutable global matrix.
I would like to point out that this code works: int[1] foo2() { int[1] a; return a; } enum int[1] m3 = foo2(); immutable int[1] m4 = foo2(); void main() {}
See also bug 5081 for a different solution
This is definitely a bug, not an enhancement. It applies to any use of multidimensional static arrays in CTFE (not just return values). Thus, it also applies to D1. Fixed. D1: https://github.com/D-Programming-Language/dmd/commit/ef2a0f1da10331c4de102ca3e029ea1c1c1a46bf D2: https://github.com/D-Programming-Language/dmd/commit/0219a5f0dcc88076759a4c472582954d0fb804b0
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル