[9511841] | 1 | #include <fstream.hfa>
|
---|
[d68de59] | 2 | #include <enum.hfa>
|
---|
| 3 |
|
---|
[85855b0] | 4 | enum(int) A !{
|
---|
[d68de59] | 5 | a = 10
|
---|
| 6 | };
|
---|
| 7 |
|
---|
| 8 | enum(int) B {
|
---|
| 9 | b = 20
|
---|
| 10 | };
|
---|
| 11 |
|
---|
| 12 | enum(int) AB {
|
---|
| 13 | inline A,
|
---|
| 14 | inline B,
|
---|
| 15 | ab = 30
|
---|
| 16 | };
|
---|
| 17 |
|
---|
| 18 | enum(int) C {
|
---|
| 19 | c = 40
|
---|
[9511841] | 20 | };
|
---|
| 21 |
|
---|
[d68de59] | 22 | enum(int) D {
|
---|
| 23 | d = 50
|
---|
[9511841] | 24 | };
|
---|
| 25 |
|
---|
[d68de59] | 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 |
|
---|
[85855b0] | 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
|
---|
[5eb3f65] | 40 | // i.e. int identity_t(enum ACD a) would not work as the value(a) is ambigious currently
|
---|
[85855b0] | 41 | int identity_t(enum ACD cat) {
|
---|
[5eb3f65] | 42 | return value(cat);
|
---|
[d68de59] | 43 | }
|
---|
| 44 |
|
---|
[9511841] | 45 | int main() {
|
---|
[d68de59] | 46 | // Note: We need to use qualified name syntax even if no ! hidding
|
---|
| 47 | // Because Inline introduce ambiguity on symbols
|
---|
[85855b0] | 48 | sout | "Symbols (enumerator) should have the same values:" |nl;
|
---|
[5eb3f65] | 49 | sout | "Symbol a: (10) " | value(A.a) | "," | value(AB.a) | "," | value(ACD.a) | nl;
|
---|
| 50 | sout | "Symbol b: (20) " | value(B.b) | "," | value(AB.b) | nl;
|
---|
| 51 | sout | "Symbol ab: (30) " | value(AB.ab) | nl;
|
---|
| 52 | sout | "Symbol c: (40) " | value(C.c) | "," | value(CD.c) | "," | value(ACD.c) | nl;
|
---|
| 53 | sout | "Symbol d: (50) " | value(D.d) | "," | value(CD.d) | "," | value(ACD.d) | nl;
|
---|
| 54 | sout | "Symbol cd: (60) " | value(CD.cd) | "," | value(ACD.cd) | nl;
|
---|
| 55 | sout | "Symbol acd: (70) " | value(ACD.acd) | nl;
|
---|
[d68de59] | 56 |
|
---|
[85855b0] | 57 | sout | "Casting/Upcasting:" | nl;
|
---|
[5eb3f65] | 58 | sout | "Symbol a: (10) " | value((A)A.a) | "," | value((AB)A.a) | "," | value((ACD)A.a) | nl;
|
---|
| 59 | sout | "Symbol b: (20) " | value((B)B.b) | "," | value((AB)B.b) | nl;
|
---|
| 60 | sout | "Symbol ab: (30) " | value((AB)AB.ab) | nl;
|
---|
| 61 | 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;
|
---|
| 62 | sout | "Symbol d: (50) " | value((D)D.d) | "," | value((CD)D.d) | "," | value((ACD)D.d) | "," | value((ACD)CD.d) | nl;
|
---|
| 63 | sout | "Symbol cd: (60) " | value((CD)CD.cd) | "," | value((ACD)CD.cd) | nl;
|
---|
| 64 | sout | "Symbol acd: (70) " | value((ACD)ACD.acd) | nl;
|
---|
[d68de59] | 65 |
|
---|
[85855b0] | 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;
|
---|
[5eb3f65] | 72 | }
|
---|