Comment #0 by bearophile_hugs — 2010-10-31T06:15:06Z
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.
Comment #1 by adrian — 2010-10-31T07:33:54Z
upvoted!
Comment #2 by denis.spir — 2010-10-31T13:07:38Z
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