Enum Default Initializer?
    Salih Dincer 
    salihdb at hotmail.com
       
    Mon Dec  5 03:10:16 UTC 2022
    
    
  
Hi All, are these results normal?
The results have nothing to do with extern(c). I just wanted to 
see the simplest results.
```d
extern (C) void main()
{
   enum SAYI : char { bir = 49, iki }
   enum NUMS : SAYI {
         one = SAYI.bir,
         two = SAYI.iki
   }
   import core.stdc.stdio;
   printf("%c\n", SAYI.bir);     // okay, ASCII: 1
   printf("%c\n", NUMS.iki);     // okay, ASCII: 2
   printf("%c\n", NUMS.one.iki); // opps: ASCII: 2
   printf("%c\n", NUMS.two.iki); // opps: ASCII: 2
   // printf("%c\n", NUMS.three); // okay: ERROR
   printf("%c\n", NUMS.iki);     // opps: ASCII: 2
   printf("%c\n", NUMS.iki.iki); // opps: ASCII: 2
   enum Bar : SAYI { one }
   printf("[%c]\n", Bar.one);    // okay, ASCII: []
   assert(Bar.one == '\0');
   /* other error; Comparison between different enumeration types 
`Foo` and `SAYI`; If this behavior is intended consider using 
`std.conv.asOriginalType`
   enum Foo : SAYI { one, two }
   with (SAYI) enum Zoo : SAYI
   {
     one = bir, two
   }
   //*/
   with(SAYI)
   {
     enum Zoo : SAYI
     {
       one = bir,
       two = iki,
       three = cast(SAYI)'3'
     }
     printf("%c\n", Zoo.three); // okay, ASCII: 3
   }
}
```
[v2.099.0 Specification on the 
subject:](https://docarchives.dlang.io/v2.099.0/spec/enum.html)
> 7. If there is no AssignExpression and it is not the first 
> EnumMember, it is given the value of the previous EnumMember+1. 
> If the value of the previous EnumMember is EnumBaseType.max, it 
> is an error. If the value of the previous EnumMember+1 is the 
> same as the value of the previous EnumMember, it is an error. 
> (This can happen with floating point types.)
>
> 8. All EnumMembers are in scope for the AssignExpressions.
> ```d
> enum C
> {
>    A = B,  // A = 4
>    B = D,  // B = 4
>    C = 3,  // C = 3
>    D       // D = 4
> }
> enum E : C
> {
>    E1 = C.D,
>    E2      // error, C.D is C.max
> }
> ```
SDB at 79
    
    
More information about the Digitalmars-d-learn
mailing list