function pointer as the enum base type

Denis Koroskin 2korden at gmail.com
Sun Oct 5 16:26:55 PDT 2008


On Mon, 06 Oct 2008 03:21:09 +0400, mumba <qniol at o2.pl> wrote:

> Idea: to make an enum type with function pointers as it's elements.
> Problem: no more than one element can be inserted!
>
> $echo '
> void foo() {}
> void bar() {}
>
> enum Enum : void function() {
>     FOO = &foo,
>     BAR = &bar
> }
>
> int main() { return 0;	}' > enum.d
> $dmd --help
> Digital Mars D Compiler v2.014
> Copyright (c) 1999-2008 by Digital Mars written by Walter Bright
> Documentation: http://www.digitalmars.com/d/2.0/index.html
> ...
> $dmd enum.d
> enum.d(5): Error: Integer constant expression expected instead of (&  
> bar) < (& foo)
> enum.d(5): Error: Integer constant expression expected instead of (&  
> bar) > (& foo)
>
>
> I don't understand the error message.
> First - why integer constant expression expected, if it's supposed to be  
> the function based enum? Second - instead of what? (& bar) expression,  
> which is smaller than (& foo), or boolean expression (& bar) < (& foo)?
> Third - in both cases: if only one of these messages appeard - it would  
> be just strange for me. But as they are together and both refer to the  
> same line - I'm knocked out. What logic leads to such mutually exclusive  
> pieces of information?
>
> Please someone explain it to me.
>
> By the way:
>
> enum Enum : void function() {
>     FOO = &foo
> }
>
> works fine.
>
>
> cheers
>


Looks like it can't sort the enum values at compile time. That's because  
&foo and &bar are not known until codegen phase.


More information about the Digitalmars-d-learn mailing list