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