Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ libcfa/src/collections/string.cfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Oct 18 21:52:09 2023
-// Update Count     : 208
+// Last Modified On : Sat Sep  2 12:05:57 2023
+// Update Count     : 206
 //
 
@@ -138,5 +138,5 @@
 
 void ?|?( ifstream & in, _Istream_Sstr f ) {
-    (ifstream &)(in | f);
+    (ifstream &)(in | f); ends( in );
 }
 
Index: libcfa/src/collections/string_res.cfa
===================================================================
--- libcfa/src/collections/string_res.cfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ libcfa/src/collections/string_res.cfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Oct 18 21:54:54 2023
-// Update Count     : 15
+// Last Modified On : Mon Aug 14 18:06:01 2023
+// Update Count     : 12
 //
 
@@ -236,5 +236,4 @@
         // get bytes
         try {
-			*(temp.Handle.ulink->EndVbyte) = '\0';   // pre-assign empty cstring
             in | wdi( lenReadable, temp.Handle.ulink->EndVbyte );
         } catch (cstring_length*) {
@@ -248,10 +247,10 @@
     }
 
-	if ( temp.Handle.lnth > 0 ) s = temp;
+    s = temp;
     return in;
 }
 
 void ?|?( ifstream & in, string_res & this ) {
-    (ifstream &)(in | this);
+    (ifstream &)(in | this); ends( in );
 }
 
@@ -269,26 +268,18 @@
 	cstr[wd] = '\0';									// guard null terminate string
 	try {
-		cstr[0] = '\0';									// pre-assign as empty cstring
 		is | cf;
 	} catch( cstring_length * ) {
 		cont = true;
 	} finally {
-		if ( ! cf.flags.ignore &&						// ok to initialize string
-				cstr[0] != '\0' ) {						// something was read
-			*(f.s) = cstr;
-		}
+        if ( ! cf.flags.ignore ) *(f.s) = cstr;			// ok to initialize string
 	} // try
 	for ( ; cont; )  {									// overflow read ?
 		cont = false;
 		try {
-			cstr[0] = '\0';								// pre-assign as empty cstring
 			is | cf;
 		} catch( cstring_length * ) {
 			cont = true;								// continue not allowed
 		} finally {
-			if ( ! cf.flags.ignore &&
-					cstr[0] != '\0' ) {					// something was read
-				*(f.s) += cstr;							// build string chunk at a time
-			}
+			if ( ! cf.flags.ignore ) *(f.s) += cstr;	// build string chunk at a time
 		} // try
 	} // for
@@ -297,5 +288,5 @@
 
 void ?|?( ifstream & in, _Istream_Rstr f ) {
-    (ifstream &)(in | f);
+    (ifstream &)(in | f); ends( in );
 }
 
Index: libcfa/src/concurrency/channel.hfa
===================================================================
--- libcfa/src/concurrency/channel.hfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ libcfa/src/concurrency/channel.hfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -28,5 +28,4 @@
     unlock( lock );
     park();
-    __atomic_thread_fence( __ATOMIC_SEQ_CST );
     return sn.extra == 0p;
 }
Index: libcfa/src/fstream.cfa
===================================================================
--- libcfa/src/fstream.cfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ libcfa/src/fstream.cfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Oct 18 22:05:54 2023
-// Update Count     : 549
+// Last Modified On : Fri Aug 18 10:41:17 2023
+// Update Count     : 541
 //
 
@@ -230,4 +230,6 @@
 void nlOff( ifstream & os ) { os.nlOnOff$ = false; }
 
+void ends( ifstream & is ) {}
+
 bool eof( ifstream & is ) { return feof( (FILE *)(is.file$) ) != 0; }
 
@@ -309,5 +311,4 @@
 	} // if
 	va_end( args );
-//	if ( len == 0 ) throw ExceptionInst( missing_data );
 	return len;
 } // fmt
Index: libcfa/src/fstream.hfa
===================================================================
--- libcfa/src/fstream.hfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ libcfa/src/fstream.hfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Oct 18 20:30:12 2023
-// Update Count     : 261
+// Last Modified On : Fri Aug 18 10:41:15 2023
+// Update Count     : 258
 //
 
@@ -117,14 +117,16 @@
 void nlOn( ifstream & );
 void nlOff( ifstream & );
+void ends( ifstream & );
 int fmt( ifstream &, const char format[], ... ) __attribute__(( format(scanf, 2, 3) ));
-ifstream & ungetc( ifstream & is, char c );
-bool eof( ifstream & is );
 
 bool fail( ifstream & is );
 void clear( ifstream & );
+bool eof( ifstream & is );
 void open( ifstream & is, const char name[], const char mode[] ); // FIX ME: use default = "r"
 void open( ifstream & is, const char name[] );
 void close( ifstream & is );
+
 ifstream & read( ifstream & is, char data[], size_t size );
+ifstream & ungetc( ifstream & is, char c );
 
 void ?{}( ifstream & is );
Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ libcfa/src/iostream.cfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -1,2 +1,3 @@
+
 //
 // Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
@@ -10,6 +11,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Oct 19 21:10:10 2023
-// Update Count     : 1801
+// Last Modified On : Sun Oct  8 12:10:21 2023
+// Update Count     : 1564
 //
 
@@ -784,4 +785,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( bool & )
 
 	istype & ?|?( istype & is, char & c ) {
@@ -795,4 +797,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( char & )
 
 	istype & ?|?( istype & is, signed char & sc ) {
@@ -800,4 +803,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( signed char & )
 
 	istype & ?|?( istype & is, unsigned char & usc ) {
@@ -805,4 +809,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( unsigned char & )
 
 	istype & ?|?( istype & is, short int & si ) {
@@ -810,4 +815,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( short int & )
 
 	istype & ?|?( istype & is, unsigned short int & usi ) {
@@ -815,4 +821,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( unsigned short int & )
 
 	istype & ?|?( istype & is, int & i ) {
@@ -820,4 +827,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( int & )
 
 	istype & ?|?( istype & is, unsigned int & ui ) {
@@ -825,4 +833,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( unsigned int & )
 
 	istype & ?|?( istype & is, long int & li ) {
@@ -830,4 +839,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( long int & )
 
 	istype & ?|?( istype & is, unsigned long int & ulli ) {
@@ -835,4 +845,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( unsigned long int & )
 
 	istype & ?|?( istype & is, long long int & lli ) {
@@ -840,4 +851,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( long long int & )
 
 	istype & ?|?( istype & is, unsigned long long int & ulli ) {
@@ -845,4 +857,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( unsigned long long int & )
 
 	#if defined( __SIZEOF_INT128__ )
@@ -850,4 +863,5 @@
 		return (istype &)(is | (unsigned int128 &)llli);
 	} // ?|?
+	ISTYPE_VOID_IMPL( int128 & )
 
 	istype & ?|?( istype & is, unsigned int128 & ullli ) {
@@ -866,4 +880,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( unsigned int128 & )
 	#endif // __SIZEOF_INT128__
 
@@ -872,4 +887,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( float & )
 
 	istype & ?|?( istype & is, double & d ) {
@@ -877,4 +893,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( double & )
 
 	istype & ?|?( istype & is, long double & ld ) {
@@ -882,4 +899,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( long double & )
 
 	istype & ?|?( istype & is, float _Complex & fc ) {
@@ -889,4 +907,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( float _Complex & )
 
 	istype & ?|?( istype & is, double _Complex & dc ) {
@@ -896,4 +915,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( double _Complex & )
 
 	istype & ?|?( istype & is, long double _Complex & ldc ) {
@@ -903,4 +923,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( long double _Complex & )
 
 	istype & ?|?( istype & is, const char fmt[] ) {
@@ -908,4 +929,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( const char * )
 
 	// manipulators
@@ -915,5 +937,5 @@
 
 	void ?|?( istype & is, istype & (* manip)( istype & ) ) {
-		manip( is );
+		manip( is ); ends( is );
 	} // ?|?
 
@@ -944,108 +966,95 @@
 			char fmtstr[ sizeof("%*[]") + nscanset ];
 			int pos = 0;
-			strcpy( &fmtstr[pos], "%*[" );  pos += 3;
+			fmtstr[pos] = '%';                  pos += 1;
+			fmtstr[pos] = '*';                  pos += 1;
+			fmtstr[pos] = '[';                  pos += 1;
 			strcpy( &fmtstr[pos], f.scanset );  pos += nscanset;
-			strcpy( &fmtstr[pos], "]" );
-			fmt( is, fmtstr, "" );						// skip scanset
-		} else {
-			char ch;
-//			fprintf( stderr, "skip " );
-			for ( f.wd ) {								// skip N characters
-			  if ( eof( is ) ) break;
-				fmt( is, "%c", &ch );
-//				fprintf( stderr, "`%c' ", ch );
-			} // for
-		} // if
+			fmtstr[pos] = ']';                  pos += 1;
+			fmtstr[pos] = '\0';
+			fmt( is, fmtstr, (void*)0 );  // last arg is dummy: suppress gcc warning
+		}
+		else for ( f.wd ) fmt( is, "%*c" );
 		return is;
 	}
+	ISTYPE_VOID_IMPL( _Istream_Cskip )
 
 	istype & ?|?( istype & is, _Istream_Cstr f ) {
-		const char * scanset;
-		size_t nscanset = 0;
+		const char * scanset = f.scanset;
 		if ( f.flags.delimiter ) scanset = f.delimiter;	// getline ?
-		else scanset = f.scanset;
-		if ( scanset ) nscanset = strlen( scanset );
-
-		char fmtstr[nscanset + 32];						// storage for scanset and format codes
+
+		size_t len = 0;
+		if ( scanset ) len = strlen( scanset );
+		char fmtstr[len + 16];
+		int start = 1;
 		fmtstr[0] = '%';
-
-		int pos = 1;
-		int args;
-		bool check = true;
-
-		if ( f.flags.ignore ) { check = false; fmtstr[1] = '*'; pos += 1; }
-		int rwd = f.wd;
-		if ( f.wd != -1 ) {								// => just ignore versus ignore with width
+		if ( f.flags.ignore ) { fmtstr[1] = '*'; start += 1; }
+		// no maximum width necessary because text ignored => width is read width
+		if ( f.wd != -1 ) {
 			// wd is buffer bytes available (for input chars + null terminator)
 			// rwd is count of input chars
-			// no maximum width necessary because text ignored => width is read width
-			if ( f.flags.rwd ) check = false;
-			else rwd = f.wd - 1;
-			pos += sprintf( &fmtstr[pos], "%d", rwd );
+			int rwd;
+			if (f.flags.rwd) {
+				verify (f.wd >= 0);
+				rwd = f.wd;
+			} else {
+				verify (f.wd >= 1);
+				rwd = f.wd - 1;
+			} // if
+			start += sprintf( &fmtstr[start], "%d", rwd );
+		}
+
+		if ( ! scanset ) {
+			// %s, %*s, %ws, %*ws
+			fmtstr[start] = 's'; fmtstr[start + 1] = '\0';
+			// printf( "cstr %s\n", fmtstr );
+		} else {
+			// incl %[xxx],  %*[xxx],  %w[xxx],  %*w[xxx]
+			// excl %[^xxx], %*[^xxx], %w[^xxx], %*w[^xxx]
+			fmtstr[start] = '['; start += 1;
+			if ( f.flags.inex ) { fmtstr[start] = '^'; start += 1; }
+			strcpy( &fmtstr[start], scanset );			// copy includes '\0'
+			len += start;
+			fmtstr[len] = ']'; fmtstr[len + 1] = '\0';
+			// printf( "incl/excl %s\n", fmtstr );
 		} // if
 
-		if ( ! scanset ) {								// %s, %*s, %ws, %*ws
-//			fprintf( stderr, "cstr %s\n", f.s );
-			strcpy( &fmtstr[pos], "s%n" );
-			int len = 0;								// may not be set in fmt
-			if ( f.flags.ignore ) args = fmt( is, fmtstr, &len ); // no string argument for '*'
-			else args = fmt( is, fmtstr, f.s, &len );
-//			fprintf( stderr, "cstr %s %d %d %d %s\n", fmtstr, args, len, f.wd, f.s );
-			if ( check && len >= rwd && ! eof( is ) ) {	// might not fit
+		int check = f.wd - 2;
+		if (! f.flags.ignore ) {
+			f.s[0] = '\0';
+			if ( ! f.flags.rwd ) f.s[check] = '\0';		// insert sentinel
+		}
+		len = fmt( is, fmtstr, f.s );
+		//fprintf( stderr, "KK %s %zd %d %c %s\n", fmtstr, len, check, f.s[check], f.s );
+
+		if ( ! f.flags.ignore && ! f.flags.rwd && f.s[check] != '\0' ) { // sentinel overwritten ?
+			// buffer filled, but would we have kept going?
+			if ( ! eof( is ) ) {
 				char peek;
-				fmt( is, "%c", &peek );					// check for whitespace terminator
-//				fprintf( stderr, "peek %d '%c'\n", args, peek );
-				if ( ! eof( is ) ) {
-					ungetc( is, peek );
-					if ( ! isspace( peek ) ) throw ExceptionInst( cstring_length );
-				} // if
-			} // if
-		} else {
-			if ( f.flags.delimiter ) {					// getline
-//				fprintf( stderr, "getline\n" );
-				sprintf( &fmtstr[pos], "[%s%s]%%n", f.flags.inex ? "^" : "", scanset );
-//				fprintf( stderr, "getline %s %d\n", fmtstr, f.wd );
-				int len = 0;							// may not be set in fmt
-				if ( f.flags.ignore ) args = fmt( is, fmtstr, &len ); // no string argument for '*'
-				else args = fmt( is, fmtstr, f.s, &len );
-//				fprintf( stderr, "getline %s %d %d %d\n", fmtstr, args, f.wd, eof( is ) );
-				if ( check && len == rwd && ! eof( is ) ) {	// might not fit
-					char peek;
-					fmt( is, "%c", &peek );				// check for delimiter
-//					fprintf( stderr, "peek %d '%c'\n", args, peek );
-					if ( ! eof( is ) ) {
-						if ( peek != f.delimiter[0] ) {
-							ungetc( is, peek );
-							throw ExceptionInst( cstring_length );
-						} // if
-					} // if
-				} else fmt( is, "%*c" );				//  remove delimiter
-			} else {
-				// incl %[xxx],  %*[xxx],  %w[xxx],  %*w[xxx]
-				// excl %[^xxx], %*[^xxx], %w[^xxx], %*w[^xxx]
-				sprintf( &fmtstr[pos], "[%s%s]%%n", f.flags.inex ? "^" : "", scanset );
-//				fprintf( stderr, "incl/excl %s %d\n", fmtstr, f.wd );
-				int len = 0;							// may not be set in fmt
-				if ( f.flags.ignore ) args = fmt( is, fmtstr, &len ); // no string argument for '*'
-				else args = fmt( is, fmtstr, f.s, &len );
-//				fprintf( stderr, "incl/excl %s \"%s\" %d %d %d %d %d %c\n", fmtstr, f.s, args, f.wd, len, eof( is ), check, f.s[f.wd] );
-				if ( check && len == rwd && ! eof( is ) ) {	// might not fit
-//					fprintf( stderr, "overflow\n" );
-					char peek;
-					fmt( is, "%c", &peek );				// check for whitespace terminator
-//					fprintf( stderr, "peek %d '%c'\n", args, peek );
-					if ( ! eof( is ) ) {
-						ungetc( is, peek );
-						if ( f.flags.inex ^ strchr( f.scanset, peek ) != 0p ) throw ExceptionInst( cstring_length );
-					} // if
-				} // if
+				fmt( is, "%c", &peek );
+				ungetc( is, peek );
+				bool hasMore;
+				if (f.flags.delimiter) { // getline
+					hasMore = (peek != f.delimiter[0]);
+				} else if (f.scanset) { // incl/excl
+					bool peekMatch = strchr(f.scanset, peek) != 0p;
+					hasMore = f.flags.inex ? (!peekMatch) : (peekMatch);
+				} else { // %s
+					hasMore = !isspace(peek);
+				}
+				if (hasMore) throw (cstring_length){ &cstring_length_vt };
 			} // if
 		} // if
-		if ( args == 1 && eof( is ) ) {					// data but scan ended at EOF
-//			fprintf( stderr, "clear\n" );
-			clear( is );								// => reset EOF => detect again on next read
-		} // if
-		return is;
-	} // ?|?
+
+		if ( f.flags.delimiter ) {						// getline ?
+			if ( len == 0 ) f.s[0] = '\0';				// empty read => argument unchanged => set empty
+			if ( ! eof( is ) ) {						// ignore delimiter, may not be present because of width
+				char delimiter;
+				fmt( is, "%c", &delimiter );
+				if ( delimiter != f.delimiter[0] ) ungetc( is, delimiter );
+			} // if
+		} //if
+		return is;
+	} // ?|?
+	ISTYPE_VOID_IMPL( _Istream_Cstr )
 
 	istype & ?|?( istype & is, _Istream_Char f ) {
@@ -1053,4 +1062,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( _Istream_Char )
 } // distribution
 
@@ -1069,4 +1079,5 @@
 		return is; \
 	} /* ?|? */ \
+	ISTYPE_VOID_IMPL( _Istream_Manip(T) ) \
 } // distribution
 
@@ -1096,4 +1107,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( _Istream_Manip(float _Complex) )
 
 	istype & ?|?( istype & is, _Istream_Manip(double _Complex) dc ) {
@@ -1106,4 +1118,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( _Istream_Manip(double _Complex) )
 
 	istype & ?|?( istype & is, _Istream_Manip(long double _Complex) ldc ) {
@@ -1116,4 +1129,5 @@
 		return is;
 	} // ?|?
+	ISTYPE_VOID_IMPL( _Istream_Manip(long double _Complex) )
 } // distribution
 
Index: libcfa/src/iostream.hfa
===================================================================
--- libcfa/src/iostream.hfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ libcfa/src/iostream.hfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Oct 18 21:21:20 2023
-// Update Count     : 583
+// Last Modified On : Sun Oct  8 12:02:55 2023
+// Update Count     : 568
 //
 
@@ -306,4 +306,10 @@
 // *********************************** istream ***********************************
 
+#define ISTYPE_VOID( T ) void ?|?( istype &, T )
+#define ISTYPE_VOID_IMPL( T ) \
+	void ?|?( istype & is, T t ) { \
+		(istype &)(is | t); ends( is ); \
+	} // ?|?
+
 forall( istype & )
 trait basic_istream {
@@ -314,8 +320,8 @@
 	void nlOn( istype & );								// read newline
 	void nlOff( istype & );								// scan newline
+	void ends( istype & os );							// end of output statement
 	int fmt( istype &, const char format[], ... ) __attribute__(( format(scanf, 2, 3) ));
 	istype & ungetc( istype &, char );
 	bool eof( istype & );
-	void clear( istype & );
 }; // basic_istream
 
@@ -323,5 +329,5 @@
 trait istream {
 	bool fail( istype & );
-	void open( istype & is, const char name[], const char mode[] );
+	void clear( istype & );
 	void open( istype & is, const char name[] );
 	void close( istype & is );
@@ -336,34 +342,56 @@
 forall( istype & | basic_istream( istype ) ) {
 	istype & ?|?( istype &, bool & );
+	ISTYPE_VOID( bool & );
 
 	istype & ?|?( istype &, char & );
+	ISTYPE_VOID( char & );
 	istype & ?|?( istype &, signed char & );
+	ISTYPE_VOID( signed char & );
 	istype & ?|?( istype &, unsigned char & );
+	ISTYPE_VOID( unsigned char & );
 
 	istype & ?|?( istype &, short int & );
+	ISTYPE_VOID( short int & );
 	istype & ?|?( istype &, unsigned short int & );
+	ISTYPE_VOID( unsigned short int & );
 	istype & ?|?( istype &, int & );
+	ISTYPE_VOID( int & );
 	istype & ?|?( istype &, unsigned int & );
+	ISTYPE_VOID( unsigned int & );
 	istype & ?|?( istype &, long int & );
+	ISTYPE_VOID( long int & );
 	istype & ?|?( istype &, unsigned long int & );
+	ISTYPE_VOID( unsigned long int & );
 	istype & ?|?( istype &, long long int & );
+	ISTYPE_VOID( long long int & );
 	istype & ?|?( istype &, unsigned long long int & );
+	ISTYPE_VOID( unsigned long long int & );
 	#if defined( __SIZEOF_INT128__ )
 	istype & ?|?( istype &, int128 & );
+	ISTYPE_VOID( int128 & );
 	istype & ?|?( istype &, unsigned int128 & );
+	ISTYPE_VOID( unsigned int128 & );
 	#endif // __SIZEOF_INT128__
 
 	istype & ?|?( istype &, float & );
+	ISTYPE_VOID( float & );
 	istype & ?|?( istype &, double & );
+	ISTYPE_VOID( double & );
 	istype & ?|?( istype &, long double & );
+	ISTYPE_VOID( long double & );
 
 	istype & ?|?( istype &, float _Complex & );
+	ISTYPE_VOID( float _Complex & );
 	istype & ?|?( istype &, double _Complex & );
+	ISTYPE_VOID( double _Complex & );
 	istype & ?|?( istype &, long double _Complex & );
+	ISTYPE_VOID( long double _Complex & );
 
 	istype & ?|?( istype &, const char [] );
+	ISTYPE_VOID( const char [] );
 
 	// manipulators
 	istype & ?|?( istype &, istype & (*)( istype & ) );
+	ISTYPE_VOID( istype & (*)( istype & ) );
 	istype & nl( istype & is );
 	istype & nlOn( istype & );
@@ -374,9 +402,7 @@
 
 ExceptionDecl( cstring_length );
-ExceptionDecl( missing_data );
 
 // *********************************** manipulators ***********************************
 
-// skip does not compose with other C string manipulators.
 struct _Istream_Cskip {
 	const char * scanset;
@@ -390,4 +416,5 @@
 forall( istype & | basic_istream( istype ) ) {
 	istype & ?|?( istype & is, _Istream_Cskip f );
+	ISTYPE_VOID( _Istream_Cskip );
 }
 
@@ -431,4 +458,5 @@
 forall( istype & | basic_istream( istype ) ) {
 	istype & ?|?( istype & is, _Istream_Cstr f );
+	ISTYPE_VOID( _Istream_Cstr );
 }
 
@@ -443,4 +471,5 @@
 forall( istype & | basic_istream( istype ) ) {
 	istype & ?|?( istype & is, _Istream_Char f );
+	ISTYPE_VOID( _Istream_Char );
 }
 
@@ -461,4 +490,5 @@
 forall( istype & | basic_istream( istype ) ) { \
 	istype & ?|?( istype & is, _Istream_Manip(T) f ); \
+	ISTYPE_VOID( _Istream_Manip(T) ); \
 } // ?|?
 
Index: src/CodeTools/DeclStats.cc
===================================================================
--- src/CodeTools/DeclStats.cc	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ src/CodeTools/DeclStats.cc	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -25,4 +25,5 @@
 #include "Common/PassVisitor.h"
 #include "Common/VectorMap.h"      // for VectorMap
+#include "GenPoly/GenPoly.h"       // for hasPolyBase
 #include "SynTree/LinkageSpec.h"   // for ::NoOfSpecs, Spec
 #include "SynTree/Declaration.h"   // for FunctionDecl, TypeDecl, Declaration
Index: src/GenPoly/BoxNew.cpp
===================================================================
--- src/GenPoly/BoxNew.cpp	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ src/GenPoly/BoxNew.cpp	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -39,4 +39,31 @@
 
 namespace {
+
+/// Common field of several sub-passes of box.
+struct BoxPass {
+	TypeVarMap scopeTypeVars;
+	BoxPass() : scopeTypeVars( ast::TypeData() ) {}
+};
+
+// TODO: Could this be a common helper somewhere?
+ast::FunctionType * makeFunctionType( ast::FunctionDecl const * decl ) {
+	ast::FunctionType * type = new ast::FunctionType(
+		decl->type->isVarArgs, decl->type->qualifiers
+	);
+	for ( auto type_param : decl->type_params ) {
+		type->forall.emplace_back( new ast::TypeInstType( type_param ) );
+	}
+	for ( auto assertion : decl->assertions ) {
+		type->assertions.emplace_back( new ast::VariableExpr(
+			assertion->location, assertion ) );
+	}
+	for ( auto param : decl->params ) {
+		type->params.emplace_back( param->get_type() );
+	}
+	for ( auto retval : decl->returns ) {
+		type->returns.emplace_back( retval->get_type() );
+	}
+	return type;
+}
 
 // --------------------------------------------------------------------------
@@ -332,4 +359,5 @@
 /// * Adds appropriate type variables to the function calls.
 struct CallAdapter final :
+		public BoxPass,
 		public ast::WithConstTypeSubstitution,
 		public ast::WithGuards,
@@ -410,5 +438,5 @@
 		CodeLocation const & location, ast::Type const * type );
 
-	TypeVarMap scopeTypeVars;
+	/// Set of adapter functions in the current scope.
 	ScopedMap< std::string, ast::DeclWithType const * > adapters;
 	std::map< ast::ApplicationExpr const *, ast::Expr const * > retVals;
@@ -631,5 +659,5 @@
 	ptrdiff_t initArgCount = mutExpr->args.size();
 
-	TypeVarMap exprTypeVars;
+	TypeVarMap exprTypeVars = { ast::TypeData() };
 	// TODO: Should this take into account the variables already bound in
 	// scopeTypeVars ([ex] remove them from exprTypeVars)?
@@ -1382,5 +1410,5 @@
 
 ast::FunctionDecl const * DeclAdapter::previsit( ast::FunctionDecl const * decl ) {
-	TypeVarMap localTypeVars;
+	TypeVarMap localTypeVars = { ast::TypeData() };
 	makeTypeVarMap( decl, localTypeVars );
 
@@ -1413,8 +1441,17 @@
 			layoutParams.emplace_back( alignParam );
 		}
-		// Assertions should be stored in the main list.
-		assert( mutParam->assertions.empty() );
+		// TODO: These should possibly all be gone.
+		// More all assertions into parameter list.
+		for ( ast::ptr<ast::DeclWithType> & assert : mutParam->assertions ) {
+			// Assertion parameters may not be used in body,
+			// pass along with unused attribute.
+			assert.get_and_mutate()->attributes.push_back(
+				new ast::Attribute( "unused" ) );
+			inferredParams.push_back( assert );
+		}
+		mutParam->assertions.clear();
 		typeParam = mutParam;
 	}
+	// TODO: New version of inner loop.
 	for ( ast::ptr<ast::DeclWithType> & assert : mutDecl->assertions ) {
 		// Assertion parameters may not be used in body,
@@ -1431,18 +1468,4 @@
 	spliceBegin( mutDecl->params, layoutParams );
 	addAdapters( mutDecl, localTypeVars );
-
-	// Now have to update the type to match the declaration.
-	ast::FunctionType * type = new ast::FunctionType(
-		mutDecl->type->isVarArgs, mutDecl->type->qualifiers );
-	for ( auto type_param : mutDecl->type_params ) {
-		type->forall.emplace_back( new ast::TypeInstType( type_param ) );
-	}
-	for ( auto param : mutDecl->params ) {
-		type->params.emplace_back( param->get_type() );
-	}
-	for ( auto retval : mutDecl->returns ) {
-		type->returns.emplace_back( retval->get_type() );
-	}
-	mutDecl->type = type;
 
 	return mutDecl;
@@ -1478,4 +1501,6 @@
 		}
 	}
+	// TODO: Can this be updated as we go along?
+	mutDecl->type = makeFunctionType( mutDecl );
 	return mutDecl;
 }
@@ -1533,4 +1558,5 @@
 	assertf( it != adapters.end(), "Could not correct floating node." );
 	return ast::mutate_field( expr, &ast::VariableExpr::var, it->second );
+
 }
 
@@ -1544,4 +1570,5 @@
 /// * Inserts dynamic calculation of polymorphic type layouts where needed.
 struct PolyGenericCalculator final :
+		public BoxPass,
 		public ast::WithConstTypeSubstitution,
 		public ast::WithDeclsToAdd<>,
@@ -1588,10 +1615,9 @@
 	/// C sizeof().
 	ast::Expr const * genSizeof( CodeLocation const &, ast::Type const * );
+
 	/// Enters a new scope for type-variables,
 	/// adding the type variables from the provided type.
 	void beginTypeScope( ast::Type const * );
 
-	/// The type variables and polymorphic parameters currently in scope.
-	TypeVarMap scopeTypeVars;
 	/// Set of generic type layouts known in the current scope,
 	/// indexed by sizeofName.
@@ -1642,5 +1668,5 @@
 		ast::TypeDecl const * decl ) {
 	ast::Type const * base = decl->base;
-	if ( nullptr == base ) return decl;
+	if ( nullptr == base) return decl;
 
 	// Add size/align variables for opaque type declarations.
@@ -1667,7 +1693,8 @@
 	alignDecl->accept( *visitor );
 
-	// A little trick to replace this with two declarations.
-	// Adding after makes sure that there is no conflict with adding stmts.
+	// Can't use [makeVar], because it inserts into stmtsToAdd and TypeDecls
+	// can occur at global scope.
 	declsToAddAfter.push_back( alignDecl );
+	// replace with sizeDecl.
 	return sizeDecl;
 }
@@ -1694,5 +1721,6 @@
 
 	// Change initialization of a polymorphic value object to allocate via a
-	// variable-length-array (alloca cannot be safely used in loops).
+	// variable-length-array (alloca was previouly used, but it cannot be
+	// safely used in loops).
 	ast::ObjectDecl * newBuf = new ast::ObjectDecl( decl->location,
 		bufNamer.newName(),
@@ -2182,4 +2210,5 @@
 /// * Strips fields from generic structure declarations.
 struct Eraser final :
+		public BoxPass,
 		public ast::WithGuards {
 	void guardTypeVarMap( ast::Type const * type ) {
@@ -2196,6 +2225,4 @@
 	void previsit( ast::PointerType const * type );
 	void previsit( ast::FunctionType const * type );
-public:
-	TypeVarMap scopeTypeVars;
 };
 
Index: src/GenPoly/GenPoly.cc
===================================================================
--- src/GenPoly/GenPoly.cc	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ src/GenPoly/GenPoly.cc	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -273,5 +273,5 @@
 	if ( func->returns.empty() ) return nullptr;
 
-	TypeVarMap forallTypes;
+	TypeVarMap forallTypes = { ast::TypeData() };
 	makeTypeVarMap( func, forallTypes );
 	return isDynType( func->returns.front(), forallTypes );
@@ -801,5 +801,5 @@
 	const ast::FunctionType * function = getFunctionType( expr->func->result );
 	assertf( function, "ApplicationExpr has non-function type: %s", toString( expr->func->result ).c_str() );
-	TypeVarMap exprTyVars;
+	TypeVarMap exprTyVars = { ast::TypeData() };
 	makeTypeVarMap( function, exprTyVars );
 	return needsBoxing( param, arg, exprTyVars, subst );
Index: src/GenPoly/GenPoly.h
===================================================================
--- src/GenPoly/GenPoly.h	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ src/GenPoly/GenPoly.h	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -33,7 +33,5 @@
 
 	typedef ErasableScopedMap< std::string, TypeDecl::Data > TyVarMap;
-	struct TypeVarMap : public ErasableScopedMap<ast::TypeEnvKey, ast::TypeData> {
-		TypeVarMap() : ErasableScopedMap( ast::TypeData() ) {}
-	};
+	using TypeVarMap = ErasableScopedMap< ast::TypeEnvKey, ast::TypeData >;
 
 	/// Replaces a TypeInstType by its referrent in the environment, if applicable
Index: src/GenPoly/SpecializeNew.cpp
===================================================================
--- src/GenPoly/SpecializeNew.cpp	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ src/GenPoly/SpecializeNew.cpp	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -81,20 +81,24 @@
 }
 
-// The number of elements in a list, if all tuples had been flattened.
-size_t flatTypeListSize( const std::vector<ast::ptr<ast::Type>> & types ) {
-	size_t sum = 0;
-	for ( const ast::ptr<ast::Type> & type : types ) {
-		if ( const ast::TupleType * tuple = type.as<ast::TupleType>() ) {
-			sum += flatTypeListSize( tuple->types );
-		} else {
-			sum += 1;
-		}
-	}
-	return sum;
+// The number of elements in a type if it is a flattened tuple.
+size_t flatTupleSize( const ast::Type * type ) {
+	if ( auto tuple = dynamic_cast<const ast::TupleType *>( type ) ) {
+		size_t sum = 0;
+		for ( auto t : *tuple ) {
+			sum += flatTupleSize( t );
+		}
+		return sum;
+	} else {
+		return 1;
+	}
 }
 
 // Find the total number of components in a parameter list.
 size_t functionParameterSize( const ast::FunctionType * type ) {
-	return flatTypeListSize( type->params );
+	size_t sum = 0;
+	for ( auto param : type->params ) {
+		sum += flatTupleSize( param );
+	}
+	return sum;
 }
 
Index: tests/collections/.expect/string-istream-manip.txt
===================================================================
--- tests/collections/.expect/string-istream-manip.txt	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ tests/collections/.expect/string-istream-manip.txt	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -69,5 +69,5 @@
 13 wwwwwwww
 14 cccc
-15 q
+15 
 1 yyyyyyyyyyyyyyyyyyyy
 2 abcxxx
@@ -84,3 +84,3 @@
 13 wwwwwwww
 14 cccc
-15 q
+15 
Index: tests/collections/string-istream-manip.cfa
===================================================================
--- tests/collections/string-istream-manip.cfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ tests/collections/string-istream-manip.cfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -38,8 +38,5 @@
         void echoTillX(const char * casename) {
             string s;
-            // loop assumes behaviour not tested until main-case #15:
-            // on reading nothing, the prior string value is left alone
             do {
-                s = "";
                 forceStringHeapFreeSpaceTo(9);
                 sin | s;
@@ -57,5 +54,4 @@
             string s;
             do {
-                s = "";
                 sin | plainjane( s );
                 sout | casename | s;
@@ -72,5 +68,4 @@
             string_res s;
             do {
-                s = "";
                 sin | plainjane( s );
                 sout | casename | s;
@@ -87,5 +82,4 @@
             string s;
             do {
-                s = "";
                 sin | skip("-\n");
                 sin | incl( ".:|# x", s );
@@ -103,5 +97,4 @@
             string s;
             do {
-                s = "";
                 sin | skip("-\n");
                 sin | excl( "-\n", s );
@@ -120,5 +113,4 @@
             string s;
             do {
-                s = "";
                 sin | getline( s );
                 sout | casename | s;
@@ -135,5 +127,4 @@
             string s;
             do {
-                s = "";
                 sin | getline( s, '@' );
                 sout | casename | s;
Index: tests/concurrency/waituntil/channel_close.cfa
===================================================================
--- tests/concurrency/waituntil/channel_close.cfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ tests/concurrency/waituntil/channel_close.cfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -26,10 +26,10 @@
         for( ;; ) {
             if ( useAnd ) {
-                waituntil( (in << A) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST ); assert( A_removes == in ); A_removes++; removes++; }
-                and waituntil( (in2 << B) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST ); assert( B_removes == in2 ); B_removes++; removes++; }
+                waituntil( (in << A) ) { assert( A_removes == in ); A_removes++; removes++; }
+                and waituntil( (in2 << B) ) { assert( B_removes == in2 ); B_removes++; removes++; }
                 continue;
             }
-            waituntil( (in << A) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST ); assert( A_removes == in ); A_removes++; removes++; }
-            or waituntil( (in << B) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST ); ( B_removes == in ); B_removes++; removes++; }
+            waituntil( (in << A) ) { assert( A_removes == in ); A_removes++; removes++; }
+            or waituntil( (in << B) ) { assert( B_removes == in ); B_removes++; removes++; }
         }
     } catchResume ( channel_closed * e ) {} // continue to remove until would block
@@ -37,10 +37,10 @@
     try {
         for( ;; )
-            waituntil( (in << A) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST ); assert( A_removes == in ); A_removes++; removes++; }
+            waituntil( (in << A) ) { assert( A_removes == in ); A_removes++; removes++; }
     } catchResume ( channel_closed * e ) {} // continue to remove until would block
     catch ( channel_closed * e ) {} 
     try {
         for( ;; )
-            waituntil( (in << B) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST ); assert( B_removes == in ); B_removes++; removes++; }
+            waituntil( (in << B) ) { assert( B_removes == in ); B_removes++; removes++; }
     } catchResume ( channel_closed * e ) {} // continue to remove until would block
     catch ( channel_closed * e ) {} 
Index: tests/genericUnion.cfa
===================================================================
--- tests/genericUnion.cfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ tests/genericUnion.cfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -10,12 +10,11 @@
 // Created On       : Tue Dec 25 14:42:46 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Oct 20 09:13:26 2023
-// Update Count     : 15
+// Last Modified On : Tue Dec 25 14:46:33 2018
+// Update Count     : 2
 // 
 
-#include <fstream.hfa>
 #include <limits.hfa>
 
-forall( T )
+forall(T)
 union ByteView {
 	T val;
@@ -24,25 +23,24 @@
 
 forall(T)
-void print( ByteView(T) x ) {
-	for ( i; sizeof(int) ) {							// want to change to sizeof(T)
-		sout | nobase( pad0( wd( 2, hex( x.bytes[i] & 0xff ) ) ) ) | nosep;
+void print(ByteView(T) x) {
+	for (int i = 0; i < sizeof(int); i++) {				// want to change to sizeof(T)
+		printf("%02x", x.bytes[i] & 0xff);
 	}
 }
 
 forall(T)
-void f( ByteView(T) x, T val ) {
-	print( x );
-	sout | " ";
+void f(ByteView(T) x, T val) {
+	print(x);
+	printf(" ");
 	x.val = val;
-	print( x );
-	sout | nl;
+	print(x);
+	printf("\n");
 }
 
 int main() {
-	sout | nlOff;
 	ByteView(unsigned) u = { 0 };
 	ByteView(int) i = { 0 };
-	f( u, MAX );
-	f( i, -1 );
+	f(u, MAX);
+	f(i, -1);
 }
 
Index: tests/io/.expect/manipulatorsInput.arm64.txt
===================================================================
--- tests/io/.expect/manipulatorsInput.arm64.txt	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ tests/io/.expect/manipulatorsInput.arm64.txt	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -34,5 +34,5 @@
 13 wwwwwwww
 14 cccc
-15 q
+15
 a
 a
Index: tests/io/.expect/manipulatorsInput.x64.txt
===================================================================
--- tests/io/.expect/manipulatorsInput.x64.txt	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ tests/io/.expect/manipulatorsInput.x64.txt	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -34,5 +34,5 @@
 13 wwwwwwww
 14 cccc
-15 q
+15
 a
 a
Index: tests/io/.expect/manipulatorsInput.x86.txt
===================================================================
--- tests/io/.expect/manipulatorsInput.x86.txt	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ tests/io/.expect/manipulatorsInput.x86.txt	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -34,5 +34,5 @@
 13 wwwwwwww
 14 cccc
-15 q
+15
 a
 a
Index: tests/io/.expect/manipulatorsOutput4.txt
===================================================================
--- tests/io/.expect/manipulatorsOutput4.txt	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ tests/io/.expect/manipulatorsOutput4.txt	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -225,34 +225,2 @@
 -1.55051464826854e+28 -15.5051e27 -15.5051e27   -15.505e27   -15.505e27 -15.50515e27 -15.50515e27 -0015.505e27 -0015.505e27 -15.50515e27 -15.50515e27 -15.505e27   -15.505e27   -15.50515e27 -15.50515e27 -15.505e27   -15.505e27   -15.50515e27 -15.50515e27
 -6.51216152272788e+29 -651.216e27 -651.216e27   -651.22e27   -651.22e27 -651.21615e27 -651.21615e27 -00651.22e27 -00651.22e27 -651.21615e27 -651.21615e27 -651.22e27   -651.22e27   -651.21615e27 -651.21615e27 -651.22e27   -651.22e27   -651.21615e27 -651.21615e27
-0 1 1 1.0 1
-1 2 2 2.0 2
-2 4 4 4.0 4
-3 8 8 8.0 8
-4 16 16 16.0 16
-5 32 32 32.0 32
-6 64 64 64.0 64
-7 128 128 128.0 128
-8 256 256 256.0 256
-9 512 512 512.0 512
-10 1024 1.024K 1.0K 1K
-11 2048 2.048K 2.0K 2K
-12 4096 4.096K 4.1K 4K
-13 8192 8.192K 8.2K 8K
-14 16384 16.384K 16.4K 16K
-15 32768 32.768K 32.8K 33K
-16 65536 65.536K 65.5K 66K
-17 131072 131.072K 131.1K 131K
-18 262144 262.144K 262.1K 262K
-19 524288 524.288K 524.3K 524K
-20 1048576 1.04858M 1.0M 1M
-21 2097152 2.09715M 2.1M 2M
-22 4194304 4.1943M 4.2M 4M
-23 8388608 8.38861M 8.4M 8M
-24 16777216 16.7772M 16.8M 17M
-25 33554432 33.5544M 33.6M 34M
-26 67108864 67.1089M 67.1M 67M
-27 134217728 134.218M 134.2M 134M
-28 268435456 268.435M 268.4M 268M
-29 536870912 536.871M 536.9M 537M
-30 1073741824 1.07374G 1.1G 1G
-31 2147483648 2.14748G 2.1G 2G
Index: tests/io/manipulatorsOutput4.cfa
===================================================================
--- tests/io/manipulatorsOutput4.cfa	(revision 278e16284e88d7fa70bf82928dbdcd8f9f69436e)
+++ tests/io/manipulatorsOutput4.cfa	(revision 4d2d7e27e4d8dc2800e43c5566536e0edfca4b99)
@@ -7,6 +7,6 @@
 // Created On       : Tue Apr 13 17:55:02 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Oct 17 08:37:42 2023
-// Update Count     : 5
+// Last Modified On : Tue Apr 13 18:00:33 2021
+// Update Count     : 4
 // 
 
@@ -42,9 +42,4 @@
 			 | left(ws(12,5, eng(w) )) | left(sign(ws(12,5, eng(w) ))) | left(wd(12,5, eng(w) )) | left(sign(wd(12,5, eng(w) ))) | left(pad0(ws(12,5, eng(w) ))) | left(pad0(sign(ws(12,5, eng(w) )))) | left(pad0(wd(12,5, eng(w) ))) | left(pad0(sign(wd(12,5, eng(w) ))));
 	} // for
-
-	for ( exp; sizeof(int) * 8 ) {
-		size_t pow2 = 1z << exp;
-		sout | exp | pow2 | unit(eng(pow2)) | wd(0,1, unit(eng( pow2 ))) | wd(0,0, unit(eng(pow2)));
-	} // for
 } // main
 
