This code works correctly with DMD 2.050: void f1(int a) {} static void function(int a)[] foo = [&f1]; void main() {} But this doesn't compile: static void function(int a)[] foo = [function(int a) {}]; void main() {} The error message: test.d(1): Error: non-constant expression __funcliteral1 I think this second version of the code too is correct.
upvoted!
The bug report states an issue about func arrays, but: // ok void f () {} ; static void function() foo = &f ; // not ok static void function() foo = function void() {}; --> Error: non-constant expression __funcliteral1 It seems to me the issue is that one cannot initialise a function variable with the expression of a function. (Array or not.) What does the compiler expect there? What does the error mean? As we have function literals, they should, I guess, be usable where other literals are accepted. Note: auto foo = function void() {}; throws the same error. Denis
(In reply to comment #2) This is already filed as bug 2634 "Function literals are non-constant". http://d.puremagic.com/issues/show_bug.cgi?id=2634. Denis
*** This issue has been marked as a duplicate of issue 2634 ***
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル