Index: libcfa/src/stdlib.cfa
===================================================================
--- libcfa/src/stdlib.cfa	(revision f33eab74e86b57d5f42ec97c6c72a7734321c68c)
+++ libcfa/src/stdlib.cfa	(revision 94429f8f9601e8812f60f1d9e9b18c454e43dcbd)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul 19 15:05:28 2020
-// Update Count     : 501
+// Last Modified On : Thu Nov 12 07:46:09 2020
+// Update Count     : 503
 //
 
@@ -26,28 +26,8 @@
 //---------------------------------------
 
-// allocation/deallocation and constructor/destructor, non-array types
-forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } )
-T * new( Params p ) {
-	return &(*malloc()){ p };							// run constructor
-} // new
-
-forall( dtype T | { void ^?{}( T & ); } )
-void delete( T * ptr ) {
-	if ( ptr ) {										// ignore null
-		^(*ptr){};										// run destructor
-		free( ptr );
-	} // if
-} // delete
-
-forall( dtype T, ttype Params | { void ^?{}( T & ); void delete( Params ); } )
-void delete( T * ptr, Params rest ) {
-	delete( ptr );
-	delete( rest );
-} // delete
-
-
-// allocation/deallocation and constructor/destructor, array types
-forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } )
-T * anew( size_t dim, Params p ) {
+// Cforall allocation/deallocation and constructor/destructor, array types
+
+forall( dtype T | sized(T), ttype TT | { void ?{}( T &, TT ); } )
+T * anew( size_t dim, TT p ) {
 	T * arr = alloc( dim );
 	for ( unsigned int i = 0; i < dim; i += 1 ) {
@@ -68,6 +48,6 @@
 } // adelete
 
-forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } )
-void adelete( T arr[], Params rest ) {
+forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype TT | { void adelete( TT ); } )
+void adelete( T arr[], TT rest ) {
 	if ( arr ) {										// ignore null
 		size_t dim = malloc_size( arr ) / sizeof( T );
Index: libcfa/src/stdlib.hfa
===================================================================
--- libcfa/src/stdlib.hfa	(revision f33eab74e86b57d5f42ec97c6c72a7734321c68c)
+++ libcfa/src/stdlib.hfa	(revision 94429f8f9601e8812f60f1d9e9b18c454e43dcbd)
@@ -10,12 +10,12 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Sep  1 20:32:34 2020
-// Update Count     : 505
+// Last Modified On : Thu Nov 12 08:12:08 2020
+// Update Count     : 515
 //
 
 #pragma once
 
-#include "bits/defs.hfa"
-#include "bits/align.hfa"
+#include "bits/defs.hfa"								// OPTIONAL_THREAD
+#include "bits/align.hfa"								// libAlign
 
 #include <stdlib.h>										// *alloc, strto*, ato*
@@ -104,19 +104,4 @@
 	void free( T * addr ) {
 		free( (void *) addr ); 							// C free
-	} // free
-} // distribution
-
-static inline forall( ttype TT | { void free( TT ); } ) {
-	// T* does not take void* and vice-versa
-
-	void free( void * addr, TT rest ) {
-		free( addr );
-		free( rest );
-	} // free
-
-	forall( dtype T | sized(T) )
-	void free( T * addr, TT rest ) {
-		free( addr );
-		free( rest );
 	} // free
 } // distribution
@@ -177,6 +162,6 @@
 static inline T_align 	?`align   ( size_t a ) 	{ return (T_align){a}; }
 static inline T_resize 	?`resize  ( void * a )	{ return (T_resize){a}; }
+
 static inline forall( dtype T | sized(T) ) {
-
 	S_fill(T) ?`fill ( T t ) {
 		S_fill(T) ret = { 't' };
@@ -250,5 +235,4 @@
 
 	} // distribution TT
-
 } // distribution T
 
@@ -262,7 +246,5 @@
 		return (T *)memcpy( dest, src, sizeof(T) );
 	} // memcpy
-} // distribution
-
-static inline forall( dtype T | sized(T) ) {
+
 	// Cforall safe initialization/copy, i.e., implicit size specification, array types
 	T * amemset( T dest[], char fill, size_t dim ) {
@@ -275,13 +257,35 @@
 } // distribution
 
+// Cforall deallocation for multiple objects
+static inline forall( dtype T, ttype TT | { void free( TT ); } )
+void free( T * addr, TT rest ) {
+	free( addr );
+	free( rest );
+} // free
+
 // Cforall allocation/deallocation and constructor/destructor, non-array types
-forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) T * new( Params p );
-forall( dtype T | { void ^?{}( T & ); } ) void delete( T * ptr );
-forall( dtype T, ttype Params | { void ^?{}( T & ); void delete( Params ); } ) void delete( T * ptr, Params rest );
+static inline forall( dtype T | sized(T), ttype TT | { void ?{}( T &, TT ); } )
+T * new( TT p ) {
+	return &(*malloc()){ p };							// run constructor
+} // new
+
+static inline forall( dtype T | { void ^?{}( T & ); } )
+void delete( T * ptr ) {
+	if ( ptr ) {										// ignore null
+		^(*ptr){};										// run destructor
+		free( ptr );
+	} // if
+} // delete
+
+static inline forall( dtype T, ttype TT | { void ^?{}( T & ); void delete( TT ); } )
+void delete( T * ptr, TT rest ) {
+	delete( ptr );
+	delete( rest );
+} // delete
 
 // Cforall allocation/deallocation and constructor/destructor, array types
-forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) T * anew( size_t dim, Params p );
+forall( dtype T | sized(T), ttype TT | { void ?{}( T &, TT ); } ) T * anew( size_t dim, TT p );
 forall( dtype T | sized(T) | { void ^?{}( T & ); } ) void adelete( T arr[] );
-forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } ) void adelete( T arr[], Params rest );
+forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype TT | { void adelete( TT ); } ) void adelete( T arr[], TT rest );
 
 //---------------------------------------
@@ -379,5 +383,5 @@
 //---------------------------------------
 
-extern bool threading_enabled(void) OPTIONAL_THREAD;
+extern bool threading_enabled( void ) OPTIONAL_THREAD;
 
 // Local Variables: //
