Index: libcfa/src/stdlib.cfa
===================================================================
--- libcfa/src/stdlib.cfa	(revision 83176718000b9fa63cca1761b9b65e6c9d5586f6)
+++ libcfa/src/stdlib.cfa	(revision 2df85ceb394f69ff9f38dfa6bc3db3d9ea433a6f)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Apr 21 16:17:22 2024
-// Update Count     : 700
+// Last Modified On : Wed Sep 24 18:01:01 2025
+// Update Count     : 759
 //
 
@@ -33,5 +33,9 @@
 forall( T & | sized(T), Parms ... | { void ?{}( T &, Parms ); } )
 T * anew( size_t dim, Parms p ) {
-	T * arr = alloc( dim );
+	T * arr;
+	if ( sizeof( T ) == 0 ) {							// empty element size ?
+		arr = (T *)(size_t *)alloc();					// create fake array
+		*((size_t *)arr) = dim;							// remember dimension
+	} else arr = alloc( dim );
 	for ( i; dim ) {
 		(arr[i]){ p };									// run constructor
@@ -42,22 +46,15 @@
 forall( T & | sized(T) | { void ^?{}( T & ); } )
 void adelete( T arr[] ) {
-	if ( arr ) {										// ignore null
-		size_t dim = malloc_size( arr ) / sizeof( T );
-		for ( i; 0 -~= dim - 1 ) {						// reverse allocation order, must be unsigned
-			^(arr[i]){};								// run destructor
-		} // for
-		free( arr );
-	} // if
+	if ( arr == 0p ) return;							// 0p ? special case
+	size_t dim = sizeof( T ) == 0 ? (size_t)(*(size_t *)arr) : malloc_size( arr ) / sizeof( T ); // compute dimension
+	for ( i; 0 -~= dim - 1 ) {							// reverse allocation order, must be signed
+		^(arr[i]){};									// run destructor
+	} // for
+	if ( sizeof( T ) == 0 ) free( (size_t *)arr ); else free( arr );
 } // adelete
 
 forall( T & | sized(T) | { void ^?{}( T & ); }, List ... | { void adelete( List ); } )
 void adelete( T arr[], List rest ) {
-	if ( arr ) {										// ignore null
-		size_t dim = malloc_size( arr ) / sizeof( T );
-		for ( i; 0 -~= dim - 1 ) {						// reverse allocation order, must be unsigned
-			^(arr[i]){};								// run destructor
-		} // for
-		free( arr );
-	} // if
+	adelete( arr );
 	adelete( rest );
 } // adelete
@@ -69,6 +66,6 @@
 bool checkif( const char s[], int (* kind)( int ) ) {
 	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! kind( *s ) ) return false;
+	  if ( *s == '\0' ) return true;
+	  if ( ! kind( *s ) ) return false;
 		s += 1;
 	} // for
@@ -77,6 +74,6 @@
 bool checkif( const char s[], int (* kind)( int, locale_t ), locale_t locale ) {
 	for () {
-		if ( *s == '\0' ) return true;
-		if ( ! kind( *s, locale ) ) return false;
+	  if ( *s == '\0' ) return true;
+	  if ( ! kind( *s, locale ) ) return false;
 		s += 1;
 	} // for
