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