Index: src/prelude/prelude.cf
===================================================================
--- src/prelude/prelude.cf	(revision fd061ed3078616c91ed6491a7b4ea20a86f06333)
+++ src/prelude/prelude.cf	(revision 14f6bb395794c1f66c011077161a28e327f18dd6)
@@ -131,4 +131,7 @@
 		!?( float _Complex ),		!?( double _Complex ),		!?( long double _Complex );
 
+forall ( dtype DT ) int !?(                DT * );
+forall ( dtype DT ) int !?( const          DT * );
+forall ( dtype DT ) int !?(       volatile DT * );
 forall ( dtype DT ) int !?( const volatile DT * );
 forall ( ftype FT ) int !?( FT * );
@@ -235,7 +238,22 @@
 	   ?>?( long double, long double ),				?>=?( long double, long double );
 
+forall( dtype DT ) signed int ?<?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?<?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?<?(        volatile DT *,       volatile DT * );
 forall( dtype DT ) signed int ?<?(  const volatile DT *, const volatile DT * );
+
+forall( dtype DT ) signed int ?>?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?>?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?>?(        volatile DT *,       volatile DT * );
 forall( dtype DT ) signed int ?>?(  const volatile DT *, const volatile DT * );
+
+forall( dtype DT ) signed int ?<=?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?<=?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?<=?(        volatile DT *,       volatile DT * );
 forall( dtype DT ) signed int ?<=?( const volatile DT *, const volatile DT * );
+
+forall( dtype DT ) signed int ?>=?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?>=?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?>=?(        volatile DT *,       volatile DT * );
 forall( dtype DT ) signed int ?>=?( const volatile DT *, const volatile DT * );
 
Index: src/tests/avltree/avl_test.c
===================================================================
--- src/tests/avltree/avl_test.c	(revision fd061ed3078616c91ed6491a7b4ea20a86f06333)
+++ src/tests/avltree/avl_test.c	(revision 14f6bb395794c1f66c011077161a28e327f18dd6)
@@ -36,15 +36,16 @@
 
   // char* -> char*
-  int ?<?(char *a, char *b) {
-    return strcmp(a,b) < 0;
+  struct c_str { char *str; };  // wraps a C string
+  int ?<?(c_str a, c_str b) {
+    return strcmp(a.str,b.str) < 0;
   }
-  tree(char *, char *) * ssmap = create("queso", "cheese");
-  insert(&ssmap, "foo", "bar");
-  insert(&ssmap, "hello", "world");
+  tree(c_str, char *) * ssmap = create((c_str){"queso"}, "cheese");
+  insert(&ssmap, (c_str){"foo"}, "bar");
+  insert(&ssmap, (c_str){"hello"}, "world");
   assert( height(ssmap) == 2 );
 
-  printf("%s %s %s\n", *find(ssmap, "hello"), *find(ssmap, "foo"), *find(ssmap, "queso"));
+  printf("%s %s %s\n", *find(ssmap, (c_str){"hello"}), *find(ssmap, (c_str){"foo"}), *find(ssmap, (c_str){"queso"}));
 
-  remove(&ssmap, "foo");
+  remove(&ssmap, (c_str){"foo"});
   delete(ssmap);
 }
