Index: libcfa/src/enum.hfa
===================================================================
--- libcfa/src/enum.hfa	(revision 0b6c1c9d7993039f8227b9cd78963415137bb5ef)
+++ libcfa/src/enum.hfa	(revision 983f4863daeb291981defd13937616650e9e30b7)
@@ -1,25 +1,27 @@
 #pragma once
 
-forall(E) trait Bounded {
-    E lowerBound();
-    E upperBound();
-};
+forall(T) { // T is the based type of enum(T)
+    forall(E) trait Bounded {
+        E lowerBound();
+        E upperBound();
+    };
 
-forall(E, T| Bounded(E)) trait Serial {
-    unsigned fromInstance(E e);
-    E fromInt(unsigned i);
-    E succ(E e);
-    E pred(E e);
-};
+    forall(E| Bounded(E, T)) trait Serial {
+        unsigned fromInstance(E e);
+        E fromInt(unsigned i);
+        E succ(E e);
+        E pred(E e);
+    };
 
-// Opague Enum + TypedEnum
-forall(E, T | Serial(E, T)) trait CfaEnum { 
-    char * labelE(E e);
-    unsigned int posE(E e);
-};
+    // Opague Enum + TypedEnum
+    forall(E | Serial(E, T)) trait CfaEnum { 
+        char * labelE(E e);
+        unsigned int posE(E e);
+    };
 
-forall(E, T | CfaEnum(E, T)) trait TypedEnum {
-    T valueE(E e);
-};
+    forall(E | CfaEnum(E, T)) trait TypedEnum {
+        T valueE(E e);
+    };
+}
 
 forall(E, T| TypedEnum(E, T)) {
@@ -34,4 +36,5 @@
 
     // for testing; To be removed
+    // char * typeEnumString(E e);
     char * typeEnumString(E e);
 }
