Index: src/examples/gc_no_raii/src/gc.h
===================================================================
--- src/examples/gc_no_raii/src/gc.h	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
+++ src/examples/gc_no_raii/src/gc.h	(revision e297ceb4e89464ae5394d409035821fc1d22eb83)
@@ -7,9 +7,15 @@
 static inline gcpointer(T) gcmalloc()
 {
-    gcpointer(T) ptr;
-    void* address = gc_allocate(sizeof(T));
-    (&ptr){ address };
-    ctor(&ptr, address);
+    gcpointer(T) ptr = { gc_allocate(sizeof(T)) };
+    ptr{};
     gc_conditional_collect();
     return ptr;
 }
+
+forall(otype T)
+static inline void gcmalloc(gcpointer(T)* ptr)
+{
+	ptr{ gc_allocate(sizeof(T)) };
+      (*ptr){};
+      gc_conditional_collect();
+}
Index: src/examples/gc_no_raii/test/gctest.c
===================================================================
--- src/examples/gc_no_raii/test/gctest.c	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
+++ src/examples/gc_no_raii/test/gctest.c	(revision e297ceb4e89464ae5394d409035821fc1d22eb83)
@@ -8,4 +8,7 @@
 	sout | "Bonjour au monde!\n";
 
-	gcpointer(int) anInt = gcmalloc();
+	for(int i = 0; i < 1000000; i++) {
+		gcpointer(int) anInt;
+		gcmalloc(&anInt);
+	}
 }
