Index: tests/enum_tests/.expect/enumInlineValue.txt
===================================================================
--- tests/enum_tests/.expect/enumInlineValue.txt	(revision d68de591a95316294f328c176c7f3ac614713722)
+++ tests/enum_tests/.expect/enumInlineValue.txt	(revision 85855b0f02c6f17de398969fbe7ab4810d76737a)
@@ -1,4 +1,22 @@
-enumB.A is 5
-enumB.B is 6
-enumB.D is 11
-enumB.E is 12
+Symbols (enumerator) should have the same values:
+Symbol a: (10) 10, 10, 10
+Symbol b: (20) 20, 20
+Symbol ab: (30) 30
+Symbol c: (40) 40, 40, 40
+Symbol d: (50) 50, 50, 50
+Symbol cd: (60) 60, 60
+Symbol acd: (70) 70
+Casting/Upcasting:
+Symbol a: (10) 10, 10, 10
+Symbol b: (20) 20, 20
+Symbol ab: (30) 30
+Symbol c: (40) 40, 40, 40, 40, 40
+Symbol d: (50) 50, 50, 50, 50
+Symbol cd: (60) 60, 60
+Symbol acd: (70) 70
+Function Call:
+Symbol a: (10) 10, 10
+Symbol c: (40) 40, 40
+Symbol d: (50) 50, 50
+Symbol cd: (60) 60, 60
+Symbol acd: (70) 70
Index: tests/enum_tests/enumInlineValue.cfa
===================================================================
--- tests/enum_tests/enumInlineValue.cfa	(revision d68de591a95316294f328c176c7f3ac614713722)
+++ tests/enum_tests/enumInlineValue.cfa	(revision 85855b0f02c6f17de398969fbe7ab4810d76737a)
@@ -2,5 +2,5 @@
 #include <enum.hfa>
 
-enum(int) A {
+enum(int) A !{
     a = 10
 };
@@ -36,6 +36,9 @@
 };
 
-int identity(A a) {
-    return valueE(a);
+// Note: variable name (cat in this case) cannot be overloaded with those declared in enum,
+// Probably for the same reason as const overloading problem
+// i.e. int identity_t(enum ACD a) would not work as the valueE(a) is ambigious currently
+int identity_t(enum ACD cat) {
+    return valueE(cat);
 }
 
@@ -43,26 +46,27 @@
     // Note: We need to use qualified name syntax even if no ! hidding
     // Because Inline introduce ambiguity on symbols
-    // sout | "Symbols (enumerator) should have the same values:" |nl;
-    // sout | "Symbol a: (10) " | valueE(A.a) | "," | valueE(AB.a) | "," | valueE(ACD.a) | nl;
-    // sout | "Symbol b: (20) " | valueE(B.b) | "," | valueE(AB.b) | nl;
-    // sout | "Symbol ab: (30) " | valueE(AB.ab) | nl;
-    // sout | "Symbol c: (40) " | valueE(C.c) | "," | valueE(CD.c) | "," | valueE(ACD.c) | nl;
-    // sout | "Symbol d: (50) " | valueE(D.d) | "," | valueE(CD.d) | "," | valueE(ACD.d) | nl;
-    // sout | "Symbol cd: (60) " | valueE(CD.cd) | "," | valueE(ACD.cd) | nl;
-    // sout | "Symbol acd: (70) " | valueE(ACD.acd) | nl;
+    sout | "Symbols (enumerator) should have the same values:" |nl;
+    sout | "Symbol a: (10) " | valueE(A.a) | "," | valueE(AB.a) | "," | valueE(ACD.a) | nl;
+    sout | "Symbol b: (20) " | valueE(B.b) | "," | valueE(AB.b) | nl;
+    sout | "Symbol ab: (30) " | valueE(AB.ab) | nl;
+    sout | "Symbol c: (40) " | valueE(C.c) | "," | valueE(CD.c) | "," | valueE(ACD.c) | nl;
+    sout | "Symbol d: (50) " | valueE(D.d) | "," | valueE(CD.d) | "," | valueE(ACD.d) | nl;
+    sout | "Symbol cd: (60) " | valueE(CD.cd) | "," | valueE(ACD.cd) | nl;
+    sout | "Symbol acd: (70) " | valueE(ACD.acd) | nl;
 
-    // sout | "Casting/Upcasting:" | nl;
-    // sout | "Symbol a: (10) " | valueE((A)A.a) | "," | valueE((AB)A.a) | "," | valueE((ACD)A.a) | nl;
-    // sout | "Symbol b: (20) " | valueE((B)B.b) | "," | valueE((AB)B.b) | nl;
-    // sout | "Symbol ab: (30) " | valueE((AB)AB.ab) | nl;
-    // 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;
-    // sout | "Symbol d: (50) " | valueE((D)D.d) | "," | valueE((CD)D.d) | "," | valueE((ACD)D.d) | "," | valueE((ACD)CD.d) | nl;
-    // sout | "Symbol cd: (60) " | valueE((CD)CD.cd) | "," | valueE((ACD)CD.cd) | nl;
-    // sout | "Symbol acd: (70) " | valueE((ACD)ACD.acd) | nl;
+    sout | "Casting/Upcasting:" | nl;
+    sout | "Symbol a: (10) " | valueE((A)A.a) | "," | valueE((AB)A.a) | "," | valueE((ACD)A.a) | nl;
+    sout | "Symbol b: (20) " | valueE((B)B.b) | "," | valueE((AB)B.b) | nl;
+    sout | "Symbol ab: (30) " | valueE((AB)AB.ab) | nl;
+    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;
+    sout | "Symbol d: (50) " | valueE((D)D.d) | "," | valueE((CD)D.d) | "," | valueE((ACD)D.d) | "," | valueE((ACD)CD.d) | nl;
+    sout | "Symbol cd: (60) " | valueE((CD)CD.cd) | "," | valueE((ACD)CD.cd) | nl;
+    sout | "Symbol acd: (70) " | valueE((ACD)ACD.acd) | nl;
 
-    // sout | "Function Call:" | nl;
-    // sout | "Symbol a: (10) " | identity(A.a) | "," | identity(ACD.a);
-    // sout | "Symbol c: (40) " | identity(C.c) | "," | identity(CD.c)| "," | identity(ACD.c);
-    identity(A.a);
-
+    sout | "Function Call:" | nl;
+    sout | "Symbol a: (10) " | identity_t(A.a) | "," | identity_t(ACD.a) | nl;
+    sout | "Symbol c: (40) " | identity_t(C.c) | "," | identity_t(ACD.c) | nl;
+    sout | "Symbol d: (50) " | identity_t(D.d) | "," | identity_t(ACD.d) | nl;
+    sout | "Symbol cd: (60) " | identity_t(CD.cd) | "," | identity_t(ACD.cd) | nl;
+    sout | "Symbol acd: (70) " | identity_t(ACD.acd) | nl;
 }
