Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 467c8b78d5b010b1a3570addb1eec6fd97d93c2d)
+++ libcfa/src/iostream.cfa	(revision c08c3cfa1e4a6930d362550049713d2d3fd7ed43)
@@ -36,5 +36,5 @@
 
 
-forall( dtype ostype | ostream( ostype ) ) {
+forall( ostype & | ostream( ostype ) ) {
 	ostype & ?|?( ostype & os, bool b ) {
 		if ( $sepPrt( os ) ) fmt( os, "%s", $sepGetCur( os ) );
@@ -407,5 +407,5 @@
 
 // tuples
-forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } ) {
+forall( ostype &, T, Params... | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } ) {
 	ostype & ?|?( ostype & os, T arg, Params rest ) {
 		(ostype &)(os | arg);							// print first argument
@@ -426,5 +426,5 @@
 
 // writes the range [begin, end) to the given stream
-forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) ) {
+forall( ostype &, elt_type | writeable( elt_type, ostype ), iterator_type | iterator( iterator_type, elt_type ) ) {
 	void write( iterator_type begin, iterator_type end, ostype & os ) {
 		void print( elt_type i ) { os | i; }
@@ -447,5 +447,5 @@
 // Default prefix for non-decimal prints is 0b, 0, 0x.
 #define IntegralFMTImpl( T, IFMTNP, IFMTP ) \
-forall( dtype ostype | ostream( ostype ) ) { \
+forall( ostype & | ostream( ostype ) ) { \
 	ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) { \
 		if ( $sepPrt( os ) ) fmt( os, "%s", $sepGetCur( os ) ); \
@@ -540,5 +540,5 @@
 // Default prefix for non-decimal prints is 0b, 0, 0x.
 #define IntegralFMTImpl128( T, SIGNED, CODE, IFMTNP, IFMTP ) \
-forall( dtype ostype | ostream( ostype ) ) \
+forall( ostype & | ostream( ostype ) ) \
 static void base10_128( ostype & os, _Ostream_Manip(T) f ) { \
 	if ( f.val > UINT64_MAX ) { \
@@ -557,5 +557,5 @@
 	} /* if */ \
 } /* base10_128 */ \
-forall( dtype ostype | ostream( ostype ) ) { \
+forall( ostype & | ostream( ostype ) ) { \
 	ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) { \
 		if ( $sepPrt( os ) ) fmt( os, "%s", $sepGetCur( os ) ); \
@@ -659,5 +659,5 @@
 #if defined( __SIZEOF_INT128__ )
 // Default prefix for non-decimal prints is 0b, 0, 0x.
-forall( dtype ostype | ostream( ostype ) )
+forall( ostype & | ostream( ostype ) )
 static inline void base_128( ostype & os, unsigned int128 val, unsigned int128 power, _Ostream_Manip(uint64_t) & f, unsigned int maxdig, unsigned int bits, unsigned int cnt = 0 ) {
 	int wd = 1;											// f.wd is never 0 because 0 implies left-pad
@@ -724,5 +724,5 @@
 
 #define IntegralFMTImpl128( T ) \
-forall( dtype ostype | ostream( ostype ) ) { \
+forall( ostype & | ostream( ostype ) ) { \
 	ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) { \
 		_Ostream_Manip(uint64_t) fmt; \
@@ -772,5 +772,5 @@
 
 #define FloatingPointFMTImpl( T, DFMTNP, DFMTP ) \
-forall( dtype ostype | ostream( ostype ) ) { \
+forall( ostype & | ostream( ostype ) ) { \
 	ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) { \
 		if ( $sepPrt( os ) ) fmt( os, "%s", $sepGetCur( os ) ); \
@@ -806,5 +806,5 @@
 // *********************************** character ***********************************
 
-forall( dtype ostype | ostream( ostype ) ) {
+forall( ostype & | ostream( ostype ) ) {
 	ostype & ?|?( ostype & os, _Ostream_Manip(char) f ) {
 		if ( f.base != 'c' ) {							// bespoke binary/octal/hex format
@@ -839,5 +839,5 @@
 // *********************************** C string ***********************************
 
-forall( dtype ostype | ostream( ostype ) ) {
+forall( ostype & | ostream( ostype ) ) {
 	ostype & ?|?( ostype & os, _Ostream_Manip(const char *) f ) {
 		if ( ! f.val ) return os;						// null pointer ?
@@ -887,5 +887,5 @@
 
 
-forall( dtype istype | istream( istype ) ) {
+forall( istype & | istream( istype ) ) {
 	istype & ?|?( istype & is, bool & b ) {
 		char val[6];
@@ -1053,5 +1053,5 @@
 // *********************************** manipulators ***********************************
 
-forall( dtype istype | istream( istype ) )
+forall( istype & | istream( istype ) )
 istype & ?|?( istype & is, _Istream_Cstr f ) {
 	// skip xxx
@@ -1088,5 +1088,5 @@
 } // ?|?
 
-forall( dtype istype | istream( istype ) )
+forall( istype & | istream( istype ) )
 istype & ?|?( istype & is, _Istream_Char f ) {
 	fmt( is, "%*c" );									// argument variable unused
@@ -1095,5 +1095,5 @@
 
 #define InputFMTImpl( T, CODE ) \
-forall( dtype istype | istream( istype ) ) \
+forall( istype & | istream( istype ) ) \
 istype & ?|?( istype & is, _Istream_Manip(T) f ) { \
 	enum { size = 16 }; \
@@ -1124,5 +1124,5 @@
 InputFMTImpl( long double, "Lf" )
 
-forall( dtype istype | istream( istype ) )
+forall( istype & | istream( istype ) )
 istype & ?|?( istype & is, _Istream_Manip(float _Complex) fc ) {
 	float re, im;
@@ -1135,5 +1135,5 @@
 } // ?|?
 
-forall( dtype istype | istream( istype ) )
+forall( istype & | istream( istype ) )
 istype & ?|?( istype & is, _Istream_Manip(double _Complex) dc ) {
 	double re, im;
@@ -1146,5 +1146,5 @@
 } // ?|?
 
-forall( dtype istype | istream( istype ) )
+forall( istype & | istream( istype ) )
 istype & ?|?( istype & is, _Istream_Manip(long double _Complex) ldc ) {
 	long double re, im;
