Index: src/libcfa/fstream
===================================================================
--- src/libcfa/fstream	(revision c2b9f212d8881b8a864b548bc1b467e8c22aba72)
+++ src/libcfa/fstream	(revision 09687aa36e045a9f891425c68a40a1b26dc5f632)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul  7 08:32:38 2017
-// Update Count     : 117
+// Last Modified On : Thu Dec  7 08:06:11 2017
+// Update Count     : 129
 //
 
@@ -30,48 +30,53 @@
 
 // private
-_Bool sepPrt( ofstream * );
-void sepReset( ofstream * );
-void sepReset( ofstream *, _Bool );
-const char * sepGetCur( ofstream * );
-void sepSetCur( ofstream *, const char * );
-_Bool getNL( ofstream * );
-void setNL( ofstream *, _Bool );
+_Bool sepPrt( ofstream & );
+void sepReset( ofstream & );
+void sepReset( ofstream &, _Bool );
+const char * sepGetCur( ofstream & );
+void sepSetCur( ofstream &, const char * );
+_Bool getNL( ofstream & );
+void setNL( ofstream &, _Bool );
 
 // public
-void sepOn( ofstream * );
-void sepOff( ofstream * );
-_Bool sepDisable( ofstream * );
-_Bool sepEnable( ofstream * );
+void sepOn( ofstream & );
+void sepOff( ofstream & );
+_Bool sepDisable( ofstream & );
+_Bool sepEnable( ofstream & );
 
-const char * sepGet( ofstream * );
-void sepSet( ofstream *, const char * );
-const char * sepGetTuple( ofstream * );
-void sepSetTuple( ofstream *, const char * );
+const char * sepGet( ofstream & );
+void sepSet( ofstream &, const char * );
+const char * sepGetTuple( ofstream & );
+void sepSetTuple( ofstream &, const char * );
 
-int fail( ofstream * );
-int flush( ofstream * );
-void open( ofstream *, const char * name, const char * mode );
-void close( ofstream * );
-ofstream * write( ofstream *, const char * data, unsigned long int size );
-int fmt( ofstream *, const char fmt[], ... );
+int fail( ofstream & );
+int flush( ofstream & );
+void open( ofstream &, const char * name, const char * mode );
+void close( ofstream & );
+ofstream & write( ofstream &, const char * data, unsigned long int size );
+int fmt( ofstream &, const char fmt[], ... );
 
-void ?{}( ofstream & );
+void ?{}( ofstream & os );
+void ?{}( ofstream & os, const char * name, const char * mode );
 
-extern ofstream * sout, * serr;
+extern ofstream & sout, & serr;
 
-// implement context istream
+
 struct ifstream {
 	void * file;
 }; // ifstream
 
-int fail( ifstream * is );
-int eof( ifstream * is );
-void open( ifstream * is, const char * name, const char * mode );
-void close( ifstream * is );
-ifstream * read( ifstream * is, char * data, unsigned long int size );
-ifstream * ungetc( ifstream * is, char c );
-int fmt( ifstream *, const char fmt[], ... );
+// public
+int fail( ifstream & is );
+int eof( ifstream & is );
+void open( ifstream & is, const char * name );
+void close( ifstream & is );
+ifstream & read( ifstream & is, char * data, unsigned long int size );
+ifstream & ungetc( ifstream & is, char c );
+int fmt( ifstream &, const char fmt[], ... );
 
-extern ifstream * sin;
+void ?{}( ifstream & is );
+void ?{}( ifstream & is, const char * name );
+
+extern ifstream & sin;
 
 // Local Variables: //
Index: src/libcfa/fstream.c
===================================================================
--- src/libcfa/fstream.c	(revision c2b9f212d8881b8a864b548bc1b467e8c22aba72)
+++ src/libcfa/fstream.c	(revision 09687aa36e045a9f891425c68a40a1b26dc5f632)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 20 15:20:49 2017
-// Update Count     : 252
+// Last Modified On : Thu Dec  7 08:35:01 2017
+// Update Count     : 270
 //
 
@@ -27,63 +27,69 @@
 #define IO_MSG "I/O error: "
 
-void ?{}( ofstream & this, void * file, _Bool sepDefault, _Bool sepOnOff, const char * separator, const char * tupleSeparator ) {
-	this.file = file;
-	this.sepDefault = sepDefault;
-	this.sepOnOff = sepOnOff;
-	sepSet( &this, separator );
-	sepSetCur( &this, sepGet( &this ) );
-	sepSetTuple( &this, tupleSeparator );
+void ?{}( ofstream & os, void * file, _Bool sepDefault, _Bool sepOnOff, const char * separator, const char * tupleSeparator ) {
+	os.file = file;
+	os.sepDefault = sepDefault;
+	os.sepOnOff = sepOnOff;
+	sepSet( os, separator );
+	sepSetCur( os, sepGet( os ) );
+	sepSetTuple( os, tupleSeparator );
 }
 
 // private
-_Bool sepPrt( ofstream * os ) { setNL( os, false ); return os->sepOnOff; }
-void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; }
-void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; }
-const char * sepGetCur( ofstream * os ) { return os->sepCur; }
-void sepSetCur( ofstream * os, const char * sepCur ) { os->sepCur = sepCur; }
-_Bool getNL( ofstream * os ) { return os->sawNL; }
-void setNL( ofstream * os, _Bool state ) { os->sawNL = state; }
+_Bool sepPrt( ofstream & os ) { setNL( os, false ); return os.sepOnOff; }
+void sepReset( ofstream & os ) { os.sepOnOff = os.sepDefault; }
+void sepReset( ofstream & os, _Bool reset ) { os.sepDefault = reset; os.sepOnOff = os.sepDefault; }
+const char * sepGetCur( ofstream & os ) { return os.sepCur; }
+void sepSetCur( ofstream & os, const char * sepCur ) { os.sepCur = sepCur; }
+_Bool getNL( ofstream & os ) { return os.sawNL; }
+void setNL( ofstream & os, _Bool state ) { os.sawNL = state; }
 
 // public
-void sepOn( ofstream * os ) { os->sepOnOff = ! getNL( os ); }
-void sepOff( ofstream * os ) { os->sepOnOff = false; }
-
-_Bool sepDisable( ofstream *os ) {
-	_Bool temp = os->sepDefault;
-	os->sepDefault = false;
+void ?{}( ofstream & os ) {}
+
+void ?{}( ofstream & os, const char * name, const char * mode ) {
+	open( os, name, mode );
+}
+
+void sepOn( ofstream & os ) { os.sepOnOff = ! getNL( os ); }
+void sepOff( ofstream & os ) { os.sepOnOff = false; }
+
+_Bool sepDisable( ofstream & os ) {
+	_Bool temp = os.sepDefault;
+	os.sepDefault = false;
 	sepReset( os );
 	return temp;
 } // sepDisable
 
-_Bool sepEnable( ofstream *os ) {
-	_Bool temp = os->sepDefault;
-	os->sepDefault = true;
-	if ( os->sepOnOff ) sepReset( os );					// start of line ?
+_Bool sepEnable( ofstream & os ) {
+	_Bool temp = os.sepDefault;
+	os.sepDefault = true;
+	if ( os.sepOnOff ) sepReset( os );					// start of line ?
 	return temp;
 } // sepEnable
 
-const char * sepGet( ofstream * os ) { return os->separator; }
-void sepSet( ofstream * os, const char * s ) {
+const char * sepGet( ofstream & os ) { return os.separator; }
+void sepSet( ofstream & os, const char * s ) {
 	assert( s );
-	strncpy( os->separator, s, sepSize - 1 );
-	os->separator[sepSize - 1] = '\0';
+	strncpy( os.separator, s, sepSize - 1 );
+	os.separator[sepSize - 1] = '\0';
 } // sepSet
 
-const char * sepGetTuple( ofstream * os ) { return os->tupleSeparator; }
-void sepSetTuple( ofstream * os, const char * s ) {
+const char * sepGetTuple( ofstream & os ) { return os.tupleSeparator; }
+void sepSetTuple( ofstream & os, const char * s ) {
 	assert( s );
-	strncpy( os->tupleSeparator, s, sepSize - 1 );
-	os->tupleSeparator[sepSize - 1] = '\0';
+	strncpy( os.tupleSeparator, s, sepSize - 1 );
+	os.tupleSeparator[sepSize - 1] = '\0';
 } // sepSet
 
-int fail( ofstream * os ) {
-	return ferror( (FILE *)(os->file) );
+int fail( ofstream & os ) {
+	return ferror( (FILE *)(os.file) );
 } // fail
 
-int flush( ofstream * os ) {
-	return fflush( (FILE *)(os->file) );
+int flush( ofstream & os ) {
+	return fflush( (FILE *)(os.file) );
 } // flush
 
-void open( ofstream * os, const char * name, const char * mode ) {
+void open( ofstream & os, const char * name, const char * mode ) {
 	FILE *file = fopen( name, mode );
 	if ( file == 0 ) {									// do not change unless successful
@@ -92,16 +98,16 @@
 		exit( EXIT_FAILURE );
 	} // if
-	?{}( *os, file, true, false, " ", ", " );
+	(os){ file, true, false, " ", ", " };
 } // open
 
-void close( ofstream * os ) {
-	if ( (FILE *)(os->file) == stdout || (FILE *)(os->file) == stderr ) return;
-
-	if ( fclose( (FILE *)(os->file) ) == EOF ) {
+void close( ofstream & os ) {
+	if ( (FILE *)(os.file) == stdout || (FILE *)(os.file) == stderr ) return;
+
+	if ( fclose( (FILE *)(os.file) ) == EOF ) {
 		perror( IO_MSG "close output" );
 	} // if
 } // close
 
-ofstream * write( ofstream * os, const char * data, unsigned long int size ) {
+ofstream & write( ofstream & os, const char * data, unsigned long int size ) {
 	if ( fail( os ) ) {
 		fprintf( stderr, "attempt write I/O on failed stream\n" );
@@ -109,5 +115,5 @@
 	} // if
 
-	if ( fwrite( data, 1, size, (FILE *)(os->file) ) != size ) {
+	if ( fwrite( data, 1, size, (FILE *)(os.file) ) != size ) {
 		perror( IO_MSG "write" );
 		exit( EXIT_FAILURE );
@@ -116,10 +122,10 @@
 } // write
 
-int fmt( ofstream * os, const char format[], ... ) {
+int fmt( ofstream & os, const char format[], ... ) {
 	va_list args;
 	va_start( args, format );
-	int len = vfprintf( (FILE *)(os->file), format, args );
+	int len = vfprintf( (FILE *)(os.file), format, args );
 	if ( len == EOF ) {
-		if ( ferror( (FILE *)(os->file) ) ) {
+		if ( ferror( (FILE *)(os.file) ) ) {
 			fprintf( stderr, "invalid write\n" );
 			exit( EXIT_FAILURE );
@@ -133,22 +139,33 @@
 
 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), true, false, " ", ", " };
-ofstream *sout = &soutFile;
+ofstream & sout = soutFile;
 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), true, false, " ", ", " };
-ofstream *serr = &serrFile;
+ofstream & serr = serrFile;
 
 
 //---------------------------------------
 
-
-int fail( ifstream * is ) {
-	return ferror( (FILE *)(is->file) );
+// private
+void ?{}( ifstream & is, void * file ) {
+	is.file = file;
+}
+
+// public
+void ?{}( ifstream & is ) {}
+
+void ?{}( ifstream & is, const char * name ) {
+	open( is, name );
+}
+
+int fail( ifstream & is ) {
+	return ferror( (FILE *)(is.file) );
 } // fail
 
-int eof( ifstream * is ) {
-	return feof( (FILE *)(is->file) );
+int eof( ifstream & is ) {
+	return feof( (FILE *)(is.file) );
 } // eof
 
-void open( ifstream * is, const char * name, const char * mode ) {
-	FILE *file = fopen( name, mode );
+void open( ifstream & is, const char * name ) {
+	FILE *file = fopen( name, "r" );
 	if ( file == 0 ) {									// do not change unless successful
 		fprintf( stderr, IO_MSG "open input file \"%s\", ", name );
@@ -156,16 +173,16 @@
 		exit( EXIT_FAILURE );
 	} // if
-	is->file = file;
+	is.file = file;
 } // open
 
-void close( ifstream * is ) {
-	if ( (FILE *)(is->file) == stdin ) return;
-
-	if ( fclose( (FILE *)(is->file) ) == EOF ) {
+void close( ifstream & is ) {
+	if ( (FILE *)(is.file) == stdin ) return;
+
+	if ( fclose( (FILE *)(is.file) ) == EOF ) {
 		perror( IO_MSG "close input" );
 	} // if
 } // close
 
-ifstream * read( ifstream * is, char * data, unsigned long int size ) {
+ifstream & read( ifstream & is, char * data, unsigned long int size ) {
 	if ( fail( is ) ) {
 		fprintf( stderr, "attempt read I/O on failed stream\n" );
@@ -173,5 +190,5 @@
 	} // if
 
-	if ( fread( data, size, 1, (FILE *)(is->file) ) == 0 ) {
+	if ( fread( data, size, 1, (FILE *)(is.file) ) == 0 ) {
 		perror( IO_MSG "read" );
 		exit( EXIT_FAILURE );
@@ -180,5 +197,5 @@
 } // read
 
-ifstream *ungetc( ifstream * is, char c ) {
+ifstream &ungetc( ifstream & is, char c ) {
 	if ( fail( is ) ) {
 		fprintf( stderr, "attempt ungetc I/O on failed stream\n" );
@@ -186,5 +203,5 @@
 	} // if
 
-	if ( ungetc( c, (FILE *)(is->file) ) == EOF ) {
+	if ( ungetc( c, (FILE *)(is.file) ) == EOF ) {
 		perror( IO_MSG "ungetc" );
 		exit( EXIT_FAILURE );
@@ -193,11 +210,11 @@
 } // ungetc
 
-int fmt( ifstream * is, const char format[], ... ) {
+int fmt( ifstream & is, const char format[], ... ) {
 	va_list args;
 
 	va_start( args, format );
-	int len = vfscanf( (FILE *)(is->file), format, args );
+	int len = vfscanf( (FILE *)(is.file), format, args );
 	if ( len == EOF ) {
-		if ( ferror( (FILE *)(is->file) ) ) {
+		if ( ferror( (FILE *)(is.file) ) ) {
 			fprintf( stderr, "invalid read\n" );
 			exit( EXIT_FAILURE );
@@ -210,5 +227,5 @@
 
 static ifstream sinFile = { (FILE *)(&_IO_2_1_stdin_) };
-ifstream *sin = &sinFile;
+ifstream & sin = sinFile;
 
 // Local Variables: //
Index: src/libcfa/gmp
===================================================================
--- src/libcfa/gmp	(revision c2b9f212d8881b8a864b548bc1b467e8c22aba72)
+++ src/libcfa/gmp	(revision 09687aa36e045a9f891425c68a40a1b26dc5f632)
@@ -10,6 +10,6 @@
 // Created On       : Tue Apr 19 08:43:43 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep  4 09:54:33 2017
-// Update Count     : 20
+// Last Modified On : Thu Dec  7 09:10:41 2017
+// Update Count     : 21
 //
 
@@ -257,5 +257,5 @@
 // I/O
 static inline forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, Int & mp ) {
+istype & ?|?( istype & is, Int & mp ) {
  	gmp_scanf( "%Zd", &mp );
  	return is;
@@ -263,5 +263,5 @@
 
 static inline forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, Int mp ) {
+ostype & ?|?( ostype & os, Int mp ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	gmp_printf( "%Zd", mp.mpz );
Index: src/libcfa/iostream
===================================================================
--- src/libcfa/iostream	(revision c2b9f212d8881b8a864b548bc1b467e8c22aba72)
+++ src/libcfa/iostream	(revision 09687aa36e045a9f891425c68a40a1b26dc5f632)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Oct 10 14:51:10 2017
-// Update Count     : 140
+// Last Modified On : Wed Dec  6 23:03:30 2017
+// Update Count     : 144
 //
 
@@ -20,134 +20,134 @@
 trait ostream( dtype ostype ) {
 	// private
-	_Bool sepPrt( ostype * );							// return separator state (on/off)
-	void sepReset( ostype * );							// set separator state to default state
-	void sepReset( ostype *, _Bool );					// set separator and default state
-	const char * sepGetCur( ostype * );					// get current separator string
-	void sepSetCur( ostype *, const char * );			// set current separator string
-	_Bool getNL( ostype * );							// check newline
-	void setNL( ostype *, _Bool );						// saw newline
+	_Bool sepPrt( ostype & );							// return separator state (on/off)
+	void sepReset( ostype & );							// set separator state to default state
+	void sepReset( ostype &, _Bool );					// set separator and default state
+	const char * sepGetCur( ostype & );					// get current separator string
+	void sepSetCur( ostype &, const char * );			// set current separator string
+	_Bool getNL( ostype & );							// check newline
+	void setNL( ostype &, _Bool );						// saw newline
 	// public
-	void sepOn( ostype * );								// turn separator state on
-	void sepOff( ostype * );							// turn separator state off
-	_Bool sepDisable( ostype * );						// set default state to off, and return previous state
-	_Bool sepEnable( ostype * );						// set default state to on, and return previous state
+	void sepOn( ostype & );								// turn separator state on
+	void sepOff( ostype & );							// turn separator state off
+	_Bool sepDisable( ostype & );						// set default state to off, and return previous state
+	_Bool sepEnable( ostype & );						// set default state to on, and return previous state
 
-	const char * sepGet( ostype * );					// get separator string
-	void sepSet( ostype *, const char * );				// set separator to string (15 character maximum)
-	const char * sepGetTuple( ostype * );				// get tuple separator string
-	void sepSetTuple( ostype *, const char * );			// set tuple separator to string (15 character maximum)
+	const char * sepGet( ostype & );					// get separator string
+	void sepSet( ostype &, const char * );				// set separator to string (15 character maximum)
+	const char * sepGetTuple( ostype & );				// get tuple separator string
+	void sepSetTuple( ostype &, const char * );			// set tuple separator to string (15 character maximum)
 
-	int fail( ostype * );
-	int flush( ostype * );
-	void open( ostype * os, const char * name, const char * mode );
-	void close( ostype * os );
-	ostype * write( ostype *, const char *, unsigned long int );
-	int fmt( ostype *, const char fmt[], ... );
+	int fail( ostype & );
+	int flush( ostype & );
+	void open( ostype & os, const char * name, const char * mode );
+	void close( ostype & os );
+	ostype & write( ostype &, const char *, unsigned long int );
+	int fmt( ostype &, const char fmt[], ... );
 }; // ostream
 
 // trait writeable( otype T ) {
-// 	forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
+// 	forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, T );
 // }; // writeable
 
 trait writeable( otype T, dtype ostype | ostream( ostype ) ) {
-	ostype * ?|?( ostype *, T );
+	ostype & ?|?( ostype &, T );
 }; // writeable
 
 // implement writable for intrinsic types
 
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, signed char );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned char );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, char );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, signed char );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned char );
 
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long int );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long long int );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, short int );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned short int );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, int );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned int );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long int );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long long int );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned long int );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned long long int );
 
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, float ); // FIX ME: should not be required
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, double );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long double );
 
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, float _Complex );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, double _Complex );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long double _Complex );
 
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char16_t * );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const char * );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const char16_t * );
 #if ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) // char32_t == wchar_t => ambiguous
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char32_t * );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const char32_t * );
 #endif // ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 )
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const wchar_t * );
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const wchar_t * );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const void * );
 
 // tuples
-forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype * ?|?( ostype *, Params ); } )
-ostype * ?|?( ostype * os, T arg, Params rest );
+forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } )
+ostype & ?|?( ostype & os, T arg, Params rest );
 
 // manipulators
-forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
-forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
-forall( dtype ostype | ostream( ostype ) ) ostype * sep( ostype * );
-forall( dtype ostype | ostream( ostype ) ) ostype * sepTuple( ostype * );
-forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
-forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
-forall( dtype ostype | ostream( ostype ) ) ostype * sepDisable( ostype * );
-forall( dtype ostype | ostream( ostype ) ) ostype * sepEnable( ostype * );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, ostype & (*)( ostype & ) );
+forall( dtype ostype | ostream( ostype ) ) ostype & endl( ostype & );
+forall( dtype ostype | ostream( ostype ) ) ostype & sep( ostype & );
+forall( dtype ostype | ostream( ostype ) ) ostype & sepTuple( ostype & );
+forall( dtype ostype | ostream( ostype ) ) ostype & sepOn( ostype & );
+forall( dtype ostype | ostream( ostype ) ) ostype & sepOff( ostype & );
+forall( dtype ostype | ostream( ostype ) ) ostype & sepDisable( ostype & );
+forall( dtype ostype | ostream( ostype ) ) ostype & sepEnable( ostype & );
 
 // 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 ) )
-void write( iterator_type begin, iterator_type end, ostype * os );
+void write( iterator_type begin, iterator_type end, ostype & os );
 
 forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
-void write_reverse( iterator_type begin, iterator_type end, ostype * os );
+void write_reverse( iterator_type begin, iterator_type end, ostype & os );
 
 //---------------------------------------
 
 trait istream( dtype istype ) {
-	int fail( istype * );
-	int eof( istype * );
-	void open( istype * is, const char * name, const char * mode );
-	void close( istype * is );
-	istype * read( istype *, char *, unsigned long int );
-	istype * ungetc( istype *, char );
-	int fmt( istype *, const char fmt[], ... );
+	int fail( istype & );
+	int eof( istype & );
+	void open( istype & is, const char * name );
+	void close( istype & is );
+	istype & read( istype &, char *, unsigned long int );
+	istype & ungetc( istype &, char );
+	int fmt( istype &, const char fmt[], ... );
 }; // istream
 
 trait readable( otype T ) {
-	forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T );
+	forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, T );
 }; // readable
 
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, signed char & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned char & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, char & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, signed char & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned char & );
 
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, short int & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned short int & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, int & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned int & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long int & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long long int & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned long int & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned long long int & );
 
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, float & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, double & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long double & );
 
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex & );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, float _Complex & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, double _Complex & );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long double _Complex & );
 
 struct _Istream_cstrUC { char * s; };
 _Istream_cstrUC cstr( char * );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrUC );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, _Istream_cstrUC );
 
 struct _Istream_cstrC { char * s; int size; };
 _Istream_cstrC cstr( char *, int size );
-forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, _Istream_cstrC );
 
 // Local Variables: //
Index: src/libcfa/iostream.c
===================================================================
--- src/libcfa/iostream.c	(revision c2b9f212d8881b8a864b548bc1b467e8c22aba72)
+++ src/libcfa/iostream.c	(revision 09687aa36e045a9f891425c68a40a1b26dc5f632)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Oct 10 14:51:09 2017
-// Update Count     : 424
+// Last Modified On : Wed Dec  6 23:03:43 2017
+// Update Count     : 426
 //
 
@@ -25,5 +25,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, char ch ) {
+ostype & ?|?( ostype & os, char ch ) {
 	fmt( os, "%c", ch );
 	if ( ch == '\n' ) setNL( os, true );
@@ -33,5 +33,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, signed char c ) {
+ostype & ?|?( ostype & os, signed char c ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%hhd", c );
@@ -40,5 +40,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, unsigned char c ) {
+ostype & ?|?( ostype & os, unsigned char c ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%hhu", c );
@@ -47,5 +47,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, short int si ) {
+ostype & ?|?( ostype & os, short int si ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%hd", si );
@@ -54,5 +54,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, unsigned short int usi ) {
+ostype & ?|?( ostype & os, unsigned short int usi ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%hu", usi );
@@ -61,5 +61,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, int i ) {
+ostype & ?|?( ostype & os, int i ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%d", i );
@@ -68,5 +68,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, unsigned int ui ) {
+ostype & ?|?( ostype & os, unsigned int ui ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%u", ui );
@@ -75,5 +75,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, long int li ) {
+ostype & ?|?( ostype & os, long int li ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%ld", li );
@@ -82,5 +82,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, unsigned long int uli ) {
+ostype & ?|?( ostype & os, unsigned long int uli ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%lu", uli );
@@ -89,5 +89,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, long long int lli ) {
+ostype & ?|?( ostype & os, long long int lli ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%lld", lli );
@@ -96,5 +96,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, unsigned long long int ulli ) {
+ostype & ?|?( ostype & os, unsigned long long int ulli ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%llu", ulli );
@@ -103,5 +103,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, float f ) {
+ostype & ?|?( ostype & os, float f ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%g", f );
@@ -110,5 +110,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, double d ) {
+ostype & ?|?( ostype & os, double d ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%.*lg", DBL_DIG, d );
@@ -117,5 +117,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, long double ld ) {
+ostype & ?|?( ostype & os, long double ld ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%.*Lg", LDBL_DIG, ld );
@@ -124,5 +124,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, float _Complex fc ) {
+ostype & ?|?( ostype & os, float _Complex fc ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%g%+gi", crealf( fc ), cimagf( fc ) );
@@ -131,5 +131,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, double _Complex dc ) {
+ostype & ?|?( ostype & os, double _Complex dc ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%.*lg%+.*lgi", DBL_DIG, creal( dc ), DBL_DIG, cimag( dc ) );
@@ -138,5 +138,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, long double _Complex ldc ) {
+ostype & ?|?( ostype & os, long double _Complex ldc ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%.*Lg%+.*Lgi", LDBL_DIG, creall( ldc ), LDBL_DIG, cimagl( ldc ) );
@@ -145,5 +145,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, const char * str ) {
+ostype & ?|?( ostype & os, const char * str ) {
 	enum { Open = 1, Close, OpenClose };
 	static const unsigned char mask[256] @= {
@@ -185,5 +185,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, const char16_t * str ) {
+ostype & ?|?( ostype & os, const char16_t * str ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%ls", str );
@@ -193,5 +193,5 @@
 #if ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) // char32_t == wchar_t => ambiguous
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, const char32_t * str ) {
+ostype & ?|?( ostype & os, const char32_t * str ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%ls", str );
@@ -201,5 +201,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, const wchar_t * str ) {
+ostype & ?|?( ostype & os, const wchar_t * str ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%ls", str );
@@ -208,5 +208,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, const void * p ) {
+ostype & ?|?( ostype & os, const void * p ) {
 	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
 	fmt( os, "%p", p );
@@ -216,6 +216,6 @@
 
 // tuples
-forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype * ?|?( ostype *, Params ); } )
-ostype * ?|?( ostype * os, T arg, Params rest ) {
+forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } )
+ostype & ?|?( ostype & os, T arg, Params rest ) {
 	os | arg;											// print first argument
 	sepSetCur( os, sepGetTuple( os ) );					// switch to tuple separator
@@ -228,10 +228,10 @@
 // manipulators
 forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype * os, ostype * (* manip)( ostype * ) ) {
+ostype & ?|?( ostype & os, ostype & (* manip)( ostype & ) ) {
 	return manip( os );
 } // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * sep( ostype * os ) {
+ostype & sep( ostype & os ) {
 	os | sepGet( os );
 	return os;
@@ -239,5 +239,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * sepTuple( ostype * os ) {
+ostype & sepTuple( ostype & os ) {
 	os | sepGetTuple( os );
 	return os;
@@ -245,5 +245,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * endl( ostype * os ) {
+ostype & endl( ostype & os ) {
 	os | '\n';
 	setNL( os, true );
@@ -254,5 +254,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * sepOn( ostype * os ) {
+ostype & sepOn( ostype & os ) {
 	sepOn( os );
 	return os;
@@ -260,5 +260,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * sepOff( ostype * os ) {
+ostype & sepOff( ostype & os ) {
 	sepOff( os );
 	return os;
@@ -266,5 +266,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * sepEnable( ostype * os ) {
+ostype & sepEnable( ostype & os ) {
 	sepEnable( os );
 	return os;
@@ -272,5 +272,5 @@
 
 forall( dtype ostype | ostream( ostype ) )
-ostype * sepDisable( ostype * os ) {
+ostype & sepDisable( ostype & os ) {
 	sepDisable( os );
 	return os;
@@ -280,5 +280,5 @@
 
 forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
-void write( iterator_type begin, iterator_type end, ostype * os ) {
+void write( iterator_type begin, iterator_type end, ostype & os ) {
 	void print( elt_type i ) { os | i; }
 	for_each( begin, end, print );
@@ -286,5 +286,5 @@
 
 forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
-void write_reverse( iterator_type begin, iterator_type end, ostype * os ) {
+void write_reverse( iterator_type begin, iterator_type end, ostype & os ) {
 	void print( elt_type i ) { os | i; }
 	for_each_reverse( begin, end, print );
@@ -294,5 +294,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, char & c ) {
+istype & ?|?( istype & is, char & c ) {
 	fmt( is, "%c", &c );								// must pass pointer through varg to fmt
 	return is;
@@ -300,5 +300,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, signed char & sc ) {
+istype & ?|?( istype & is, signed char & sc ) {
 	fmt( is, "%hhd", &sc );
 	return is;
@@ -306,5 +306,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, unsigned char & usc ) {
+istype & ?|?( istype & is, unsigned char & usc ) {
 	fmt( is, "%hhu", &usc );
 	return is;
@@ -312,5 +312,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, short int & si ) {
+istype & ?|?( istype & is, short int & si ) {
 	fmt( is, "%hd", &si );
 	return is;
@@ -318,5 +318,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, unsigned short int & usi ) {
+istype & ?|?( istype & is, unsigned short int & usi ) {
 	fmt( is, "%hu", &usi );
 	return is;
@@ -324,5 +324,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, int & i ) {
+istype & ?|?( istype & is, int & i ) {
 	fmt( is, "%d", &i );
 	return is;
@@ -330,5 +330,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, unsigned int & ui ) {
+istype & ?|?( istype & is, unsigned int & ui ) {
 	fmt( is, "%u", &ui );
 	return is;
@@ -336,5 +336,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, long int & li ) {
+istype & ?|?( istype & is, long int & li ) {
 	fmt( is, "%ld", &li );
 	return is;
@@ -342,5 +342,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, unsigned long int & ulli ) {
+istype & ?|?( istype & is, unsigned long int & ulli ) {
 	fmt( is, "%lu", &ulli );
 	return is;
@@ -348,5 +348,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, long long int & lli ) {
+istype & ?|?( istype & is, long long int & lli ) {
 	fmt( is, "%lld", &lli );
 	return is;
@@ -354,5 +354,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, unsigned long long int & ulli ) {
+istype & ?|?( istype & is, unsigned long long int & ulli ) {
 	fmt( is, "%llu", &ulli );
 	return is;
@@ -361,5 +361,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, float & f ) {
+istype & ?|?( istype & is, float & f ) {
 	fmt( is, "%f", &f );
 	return is;
@@ -367,5 +367,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, double & d ) {
+istype & ?|?( istype & is, double & d ) {
 	fmt( is, "%lf", &d );
 	return is;
@@ -373,5 +373,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, long double & ld ) {
+istype & ?|?( istype & is, long double & ld ) {
 	fmt( is, "%Lf", &ld );
 	return is;
@@ -380,5 +380,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, float _Complex & fc ) {
+istype & ?|?( istype & is, float _Complex & fc ) {
 	float re, im;
 	fmt( is, "%g%gi", &re, &im );
@@ -388,5 +388,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, double _Complex & dc ) {
+istype & ?|?( istype & is, double _Complex & dc ) {
 	double re, im;
 	fmt( is, "%lf%lfi", &re, &im );
@@ -396,5 +396,5 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, long double _Complex & ldc ) {
+istype & ?|?( istype & is, long double _Complex & ldc ) {
 	long double re, im;
 	fmt( is, "%Lf%Lfi", &re, &im );
@@ -405,5 +405,5 @@
 _Istream_cstrUC cstr( char * str ) { return (_Istream_cstrUC){ str }; }
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, _Istream_cstrUC cstr ) {
+istype & ?|?( istype & is, _Istream_cstrUC cstr ) {
 	fmt( is, "%s", cstr.s );
 	return is;
@@ -412,5 +412,5 @@
 _Istream_cstrC cstr( char * str, int size ) { return (_Istream_cstrC){ str, size }; }
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype * is, _Istream_cstrC cstr ) {
+istype & ?|?( istype & is, _Istream_cstrC cstr ) {
 	char buf[16];
 	sprintf( buf, "%%%ds", cstr.size );
Index: src/libcfa/rational
===================================================================
--- src/libcfa/rational	(revision c2b9f212d8881b8a864b548bc1b467e8c22aba72)
+++ src/libcfa/rational	(revision 09687aa36e045a9f891425c68a40a1b26dc5f632)
@@ -12,6 +12,6 @@
 // Created On       : Wed Apr  6 17:56:25 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 23 22:35:09 2017
-// Update Count     : 95
+// Last Modified On : Wed Dec  6 23:12:53 2017
+// Update Count     : 97
 //
 
@@ -135,10 +135,10 @@
 // I/O
 forall( otype RationalImpl | arithmetic( RationalImpl ) )
-forall( dtype istype | istream( istype ) | { istype * ?|?( istype *, RationalImpl & ); } )
-istype * ?|?( istype *, Rational(RationalImpl) & );
+forall( dtype istype | istream( istype ) | { istype & ?|?( istype &, RationalImpl & ); } )
+istype & ?|?( istype &, Rational(RationalImpl) & );
 
 forall( otype RationalImpl | arithmetic( RationalImpl ) )
-forall( dtype ostype | ostream( ostype ) | { ostype * ?|?( ostype *, RationalImpl ); } )
-ostype * ?|?( ostype *, Rational(RationalImpl ) );
+forall( dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, RationalImpl ); } )
+ostype & ?|?( ostype &, Rational(RationalImpl ) );
 
 // Local Variables: //
Index: src/libcfa/rational.c
===================================================================
--- src/libcfa/rational.c	(revision c2b9f212d8881b8a864b548bc1b467e8c22aba72)
+++ src/libcfa/rational.c	(revision 09687aa36e045a9f891425c68a40a1b26dc5f632)
@@ -10,6 +10,6 @@
 // Created On       : Wed Apr  6 17:54:28 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 23 22:38:48 2017
-// Update Count     : 154
+// Last Modified On : Wed Dec  6 23:13:58 2017
+// Update Count     : 156
 //
 
@@ -228,6 +228,6 @@
 
 forall( otype RationalImpl | arithmetic( RationalImpl ) )
-forall( dtype istype | istream( istype ) | { istype * ?|?( istype *, RationalImpl & ); } )
-istype * ?|?( istype * is, Rational(RationalImpl) & r ) {
+forall( dtype istype | istream( istype ) | { istype & ?|?( istype &, RationalImpl & ); } )
+istype & ?|?( istype & is, Rational(RationalImpl) & r ) {
 	RationalImpl t;
 	is | r.numerator | r.denominator;
@@ -239,6 +239,6 @@
 
 forall( otype RationalImpl | arithmetic( RationalImpl ) )
-forall( dtype ostype | ostream( ostype ) | { ostype * ?|?( ostype *, RationalImpl ); } )
-ostype * ?|?( ostype * os, Rational(RationalImpl ) r ) {
+forall( dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, RationalImpl ); } )
+ostype & ?|?( ostype & os, Rational(RationalImpl ) r ) {
 	return os | r.numerator | '/' | r.denominator;
 } // ?|?
