Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 891b827dd8816cd7f3c6ddb6f7aceefecf2672d6)
+++ libcfa/src/iostream.cfa	(revision 86a8be5a9f4892359cae71f702614bd15dba7c2e)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jun  9 20:54:05 2019
-// Update Count     : 804
+// Last Modified On : Mon Jun 10 18:06:16 2019
+// Update Count     : 809
 //
 
@@ -797,4 +797,10 @@
 } // ?|?
 
+forall( dtype istype | istream( istype ) )
+istype & ?|?( istype & is, _Istream_Char f ) {
+	fmt( is, "%*c" );									// argument variable unused
+	return is;
+} // ?|?
+
 #define InputFMTImpl( T, CODE ) \
 forall( dtype istype | istream( istype ) ) \
@@ -802,5 +808,5 @@
 	enum { size = 16 }; \
 	char fmtstr[size]; \
-	if ( f.wd == -1 || strcmp( CODE, "c" ) == 0 ) { /* ignore width with "c" */	\
+	if ( f.wd == -1 ) { \
 		snprintf( fmtstr, size, "%%%s%s", f.ignore ? "*" : "", CODE ); \
 	} else { \
@@ -812,5 +818,4 @@
 } // ?|?
 
-InputFMTImpl( char, "c" )
 InputFMTImpl( signed char, "hhi" )
 InputFMTImpl( unsigned char, "hhi" )
Index: libcfa/src/iostream.hfa
===================================================================
--- libcfa/src/iostream.hfa	(revision 891b827dd8816cd7f3c6ddb6f7aceefecf2672d6)
+++ libcfa/src/iostream.hfa	(revision 86a8be5a9f4892359cae71f702614bd15dba7c2e)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jun  9 22:46:17 2019
-// Update Count     : 315
+// Last Modified On : Mon Jun 10 18:05:13 2019
+// Update Count     : 320
 //
 
@@ -347,9 +347,17 @@
 static inline _Istream_Cstr excl( const char * scanset, _Istream_Cstr & fmt ) { fmt.scanset = scanset; fmt.flags.inex = true; return fmt; }
 static inline _Istream_Cstr cstr( char * s ) { return (_Istream_Cstr){ s, 0p, -1, { .all : 0 } }; }
-static inline _Istream_Cstr ignore( const char * s ) { return (_Istream_Cstr)@{ s, 0p, -1, { .flags.ignore : true } }; }
+static inline _Istream_Cstr ignore( const char * s ) { return (_Istream_Cstr)@{ 0p, 0p, -1, { .flags.ignore : true } }; }
 static inline _Istream_Cstr ignore( _Istream_Cstr & fmt ) { fmt.flags.ignore = true; return fmt; }
 static inline _Istream_Cstr wd( unsigned int w, char * s ) { return (_Istream_Cstr)@{ s, 0p, w, { .all : 0 } }; }
 static inline _Istream_Cstr wd( unsigned int w, _Istream_Cstr & fmt ) { fmt.wd = w; return fmt; }
-forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, _Istream_Cstr );
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype & is, _Istream_Cstr f );
+
+struct _Istream_Char {
+	bool ignore;										// do not change input argument
+}; // _Istream_Char
+
+static inline _Istream_Char ignore( const char c ) { return (_Istream_Char)@{ true }; }
+static inline _Istream_Char ignore( _Istream_Char & fmt ) { fmt.ignore = true; return fmt; }
+forall( dtype istype | istream( istype ) ) istype & ?|?( istype & is, _Istream_Char f );
 
 forall( otype T )
@@ -368,5 +376,4 @@
 } // ?|?
 
-InputFMTDecl( char )
 InputFMTDecl( signed char )
 InputFMTDecl( unsigned char )
