1 | // Only Limited features are supported currently
|
---|
2 |
|
---|
3 | enum Days;
|
---|
4 | enum Days { Mon, Tues, Wed, Num }; // int type, integral type => auto number
|
---|
5 | Days x0;
|
---|
6 | enum Days x1;
|
---|
7 | enum( char ) { A = 'A', B, C, D }; // char type, integral type => auto number
|
---|
8 | enum( double ) { F = 3.5, G = 7.7 }; // double type, non-integral type => programmer must assign ALL enums
|
---|
9 | enum( double ) X { R = 3.5, QQ = 7.7 }; // double type, non-integral type => programmer must assign ALL enums
|
---|
10 | enum( char * ) names { X = "X", Y = "Y" }; // char * type, non-integral type => programmer must assign ALL enums
|
---|
11 | enum( int ) { Q, W, E }; // int type, integral type => auto number
|
---|
12 |
|
---|
13 | int w;
|
---|
14 | enum( int * ) addr { W = &w }; // int * type, non-integral type => programmer must assign ALL enums
|
---|
15 | enum( * int ) addr2 { WW = &w }; // int * type, non-integral type => programmer must assign ALL enums
|
---|
16 |
|
---|
17 | /*
|
---|
18 | void f() {}
|
---|
19 | void g() {}
|
---|
20 | enum( void (*)() ) { FF = f, FG = g }; // void (*)() type, non-integral type => programmer must assign ALL enums
|
---|
21 | enum( void (*)() ) funs { FF = f, FG = g }; // void (*)() type, non-integral type => programmer must assign ALL enums
|
---|
22 | enum( * [void] () ) { FF1 = f, FG1 = g }; // void (*)() type, non-integral type => programmer must assign ALL enums
|
---|
23 | enum( * [void] () ) funs1 { FF1 = f, FG1 = g }; // void (*)() type, non-integral type => programmer must assign ALL enums
|
---|
24 |
|
---|
25 | enum( [int, int] ) { XXX = [1,2] };
|
---|
26 | enum( [int, int] ) na { XXX = [1,2] };
|
---|
27 |
|
---|
28 | enum fred;
|
---|
29 | struct S {};
|
---|
30 |
|
---|
31 | enum S { UX = { { 3 }, 4 }, UY = { { 7 }, 8 } };
|
---|
32 | enum( struct S ) mary { MX };
|
---|
33 | enum mary { MX };
|
---|
34 | enum( struct S * ) mary { MX = { { 3 }, 4 }, MY = { { 7 }, 8 } };
|
---|
35 | enum( S * ) mary { MX = { { 3 }, 4 }, MY = { { 7 }, 8 } };
|
---|
36 | enum( * S ) mary { MX = { { 3 }, 4 }, MY = { { 7 }, 8 } };
|
---|
37 | enum( enum fred ) mary { C };
|
---|
38 |
|
---|
39 | struct HH {
|
---|
40 | enum hh { h };
|
---|
41 | };
|
---|
42 | //enum HH.hh h;
|
---|
43 |
|
---|
44 | // Fred is a subset of char *
|
---|
45 | enum( char * ) Fred { A = "A", B = "B", C = "C" };
|
---|
46 |
|
---|
47 | // Jack is a subset of Fred
|
---|
48 | // these are same
|
---|
49 | enum( enum Fred ) Jack { W = A, Y = C};
|
---|
50 | enum( enum Fred ) Jack { W, Y = C};
|
---|
51 | enum( Fred ) Jack { W, Y = C}; // desirable, but hard to parse
|
---|
52 |
|
---|
53 | // Mack is a subset of char *
|
---|
54 | // these are same
|
---|
55 | enum( char * ) Mack { W1 = A, Y1 = "whee" };
|
---|
56 |
|
---|
57 | // Mary is a SUPERSET of Fred
|
---|
58 | // these are same
|
---|
59 | enum Mary { inline Fred, D = "hello" };
|
---|
60 | enum( char * ) Mary { inline Fred, D = "hello" };
|
---|
61 |
|
---|
62 | enum( char * ) Charlie { G = "G", H = "H" };
|
---|
63 | enum Jane { inline Fred, inline Charlie, K = "K" };
|
---|
64 | enum( char * ) Jane { inline Fred, inline Charlie, K = "K" };
|
---|
65 |
|
---|
66 | typedef long int size_t;
|
---|
67 | enum( size_t ) Lisa { L1, L2, L3};
|
---|
68 |
|
---|
69 | // bad: Fred is char*; Lisa is size_t
|
---|
70 | enum Jane { inline Fred, inline Lisa, M = "M" };
|
---|
71 | enum( char * ) Jane { inline Fred, inline Lisa, M = "M" };
|
---|
72 |
|
---|
73 | enum( char ) Steve { steveA = 'A' };
|
---|
74 | enum Don1 { inline Steve, daveB = (char) 2 }; // ok
|
---|
75 | enum Don2 { inline Steve, daveB = 2 }; // typeof( readLine() ? steveA : 2 )
|
---|
76 |
|
---|
77 | // desirable, may cause constexpr problems
|
---|
78 | enum( struct vec3f ) Axis { Up @= {1,0,0}, Left @= {0,1,1}, Front @= {0,1,0} };
|
---|
79 | */
|
---|
80 |
|
---|
81 | // enum struct S.T jane { JX = { 3 } };
|
---|
82 | // enum S.T jane2 { JX = { 3 } };
|
---|
83 |
|
---|
84 | // enum Fred { A, B, C };
|
---|
85 | // enum enum Fred Mary { D, E, F }; // enumeration inheritance, auto number starting at C + 1
|
---|
86 | // enum enum Fred Mary { D, E, F }; // enumeration inheritance, auto number starting at C + 1
|
---|
87 | // Fred f = A;
|
---|
88 | // //Mary m1 = A, m2 = D;
|
---|
89 | // #if 0
|
---|
90 | // #endif // 0
|
---|
91 |
|
---|
92 | // enum Fred Jane { D = C, E = B, F = A } // alternate reverse names
|
---|
93 | // Jane j1 = A, J2 = F; // both value 0
|
---|
94 |
|
---|
95 | // struct Color { // C++ scoped enumerations
|
---|
96 | // enum { red, green = 20, blue };
|
---|
97 | // };
|
---|
98 | // //Color color = Color.red;
|
---|
99 |
|
---|
100 | // Local Variables: //
|
---|
101 | // tab-width: 4 //
|
---|
102 | // compile-command: "~/software/mary/cfa-cc/driver/cfa -XCFA -P -XCFA parse -XCFA -n test_enum.cfa" //
|
---|
103 | // End: //
|
---|