Index: libcfa/src/enum.cfa
===================================================================
--- libcfa/src/enum.cfa	(revision bc48c0d2a69ed59cb73030a516c35a7450cd60f0)
+++ libcfa/src/enum.cfa	(revision 793eb2f7c8d2bbc20a7f482b1ddd024187c91f5d)
@@ -10,10 +10,10 @@
 	int args = fmt( is, "%255s", val );
 	if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
-	for ( s; E ) {
-		if ( val == label( s ) ) { e = s; break; }
-	} else {
-		fprintf( stderr, "invalid enumeration constant\n" );
-		abort();									// cannot use abort stream
-	} // for
+	// for ( s; E ) {
+	// 	if ( val == label( s ) ) { e = s; break; }
+	// } else {
+	// 	fprintf( stderr, "invalid enumeration constant\n" );
+	// 	abort();									// cannot use abort stream
+	// } // for
 	return is;
 }
@@ -32,33 +32,2 @@
 	OSTYPE_VOID_IMPL( E )
 }
-
-forall( E, V | CfaEnum( E, V ) ) {						// relational operators
-    int ?==?( E l, E r ) { return posn( l ) == posn( r ); }
-    int ?!=?( E l, E r ) { return posn( l ) != posn( r ); }
-    int ?<?( E l, E r ) { return posn( l ) < posn( r ); }
-    int ?<=?( E l, E r ) { return posn( l ) <= posn( r ); }
-    int ?>?( E l, E r ) { return posn( l ) > posn( r ); }
-    int ?>=?( E l, E r ) { return posn( l ) >= posn( r ); }
-
-    E ++?( E & l ) { 
-        l = succ( l );
-        return l;
-    }
-    
-    E ?++( E & l ) {
-        E ret = l;
-        l = succ( l );
-        return ret;
-    }
-
-    E --?( E & l ) {
-        l = pred( l );
-        return l;
-    }
-
-    E ?--( E & l ) {
-        E ret = l;
-        l = pred( l );
-        return ret;
-    }
-}
Index: libcfa/src/enum.hfa
===================================================================
--- libcfa/src/enum.hfa	(revision bc48c0d2a69ed59cb73030a516c35a7450cd60f0)
+++ libcfa/src/enum.hfa	(revision 793eb2f7c8d2bbc20a7f482b1ddd024187c91f5d)
@@ -47,15 +47,33 @@
 // };
 
-forall( E, V | CfaEnum( E, V ) ) {						// relational operators
-    int ?==?( E, E );
-    int ?!=?( E, E );
-    int ?<?( E, E );
-    int ?<=?( E, E );
-    int ?>?( E, E );
-    int ?>=?( E, E );
+static inline
+forall( E, V | CfaEnum( E, V ) ) {
+    int ?==?( E l, E r ) { return posn( l ) == posn( r ); }	// relational operators
+    int ?!=?( E l, E r ) { return posn( l ) != posn( r ); }
+    int ?<?( E l, E r ) { return posn( l ) < posn( r ); }
+    int ?<=?( E l, E r ) { return posn( l ) <= posn( r ); }
+    int ?>?( E l, E r ) { return posn( l ) > posn( r ); }
+    int ?>=?( E l, E r ) { return posn( l ) >= posn( r ); }
 
-    int ++?( E &);
-    int ?++( E &);
-    int --?( E &);
-    int ?--( E &);
+    E ++?( E & l ) { 									// increment operators
+        l = succ( l );
+        return l;
+    }
+    
+    E ?++( E & l ) {
+        E ret = l;
+        l = succ( l );
+        return ret;
+    }
+
+    E --?( E & l ) {
+        l = pred( l );
+        return l;
+    }
+
+    E ?--( E & l ) {
+        E ret = l;
+        l = pred( l );
+        return ret;
+    }
 }
