- File:
-
- 1 edited
-
tests/enum_tests/enumInlineValue.cfa (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
tests/enum_tests/enumInlineValue.cfa
r85855b0 reb7586e 1 1 #include <fstream.hfa> 2 #include <enum.hfa> 3 4 enum(int) A !{ 5 a = 10 2 enum enumA { 3 A=5, B, C=10, D 6 4 }; 7 5 8 enum(int) B { 9 b = 20 6 enum enumB { 7 inline enumA, 8 E 10 9 }; 11 10 12 enum(int) AB { 13 inline A, 14 inline B, 15 ab = 30 16 }; 17 18 enum(int) C { 19 c = 40 20 }; 21 22 enum(int) D { 23 d = 50 24 }; 25 26 enum(int) CD { 27 inline C, 28 inline D, 29 cd = 60 30 }; 31 32 enum(int) ACD { 33 inline A, 34 inline CD, 35 acd = 70 36 }; 37 38 // Note: variable name (cat in this case) cannot be overloaded with those declared in enum, 39 // Probably for the same reason as const overloading problem 40 // i.e. int identity_t(enum ACD a) would not work as the valueE(a) is ambigious currently 41 int identity_t(enum ACD cat) { 42 return valueE(cat); 11 int main() { 12 enum enumB val = A; 13 sout | "enumB.A is" | val; 14 enum enumB val2 = enumB.B; 15 sout | "enumB.B is" | val2; 16 sout | "enumB.D is" | enumB.D; 17 sout | "enumB.E is" | enumB.E; 43 18 } 44 45 int main() {46 // Note: We need to use qualified name syntax even if no ! hidding47 // Because Inline introduce ambiguity on symbols48 sout | "Symbols (enumerator) should have the same values:" |nl;49 sout | "Symbol a: (10) " | valueE(A.a) | "," | valueE(AB.a) | "," | valueE(ACD.a) | nl;50 sout | "Symbol b: (20) " | valueE(B.b) | "," | valueE(AB.b) | nl;51 sout | "Symbol ab: (30) " | valueE(AB.ab) | nl;52 sout | "Symbol c: (40) " | valueE(C.c) | "," | valueE(CD.c) | "," | valueE(ACD.c) | nl;53 sout | "Symbol d: (50) " | valueE(D.d) | "," | valueE(CD.d) | "," | valueE(ACD.d) | nl;54 sout | "Symbol cd: (60) " | valueE(CD.cd) | "," | valueE(ACD.cd) | nl;55 sout | "Symbol acd: (70) " | valueE(ACD.acd) | nl;56 57 sout | "Casting/Upcasting:" | nl;58 sout | "Symbol a: (10) " | valueE((A)A.a) | "," | valueE((AB)A.a) | "," | valueE((ACD)A.a) | nl;59 sout | "Symbol b: (20) " | valueE((B)B.b) | "," | valueE((AB)B.b) | nl;60 sout | "Symbol ab: (30) " | valueE((AB)AB.ab) | nl;61 sout | "Symbol c: (40) " | valueE((C)C.c) | "," | valueE((CD)C.c) | "," | valueE((ACD)C.c) | "," | valueE((CD)CD.c)| "," | valueE((ACD)CD.c) | nl;62 sout | "Symbol d: (50) " | valueE((D)D.d) | "," | valueE((CD)D.d) | "," | valueE((ACD)D.d) | "," | valueE((ACD)CD.d) | nl;63 sout | "Symbol cd: (60) " | valueE((CD)CD.cd) | "," | valueE((ACD)CD.cd) | nl;64 sout | "Symbol acd: (70) " | valueE((ACD)ACD.acd) | nl;65 66 sout | "Function Call:" | nl;67 sout | "Symbol a: (10) " | identity_t(A.a) | "," | identity_t(ACD.a) | nl;68 sout | "Symbol c: (40) " | identity_t(C.c) | "," | identity_t(ACD.c) | nl;69 sout | "Symbol d: (50) " | identity_t(D.d) | "," | identity_t(ACD.d) | nl;70 sout | "Symbol cd: (60) " | identity_t(CD.cd) | "," | identity_t(ACD.cd) | nl;71 sout | "Symbol acd: (70) " | identity_t(ACD.acd) | nl;72 }
Note:
See TracChangeset
for help on using the changeset viewer.