Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 0d0931d462817598ca8de155091e8a68d4674b3d)
+++ src/Parser/ExpressionNode.cc	(revision 1fd3d85e43ec20f201bf82f04cfec94b481e5506)
@@ -164,22 +164,25 @@
 	} else {
 		// At least one digit in integer constant, so safe to backup while looking for suffix.
+		// This declaration and the comma expressions in the conditions mimic
+		// the declare and check pattern allowed in later compiler versions.
+		// (Only some early compilers/C++ standards do not support it.)
 		string::size_type posn;
 		// pointer value
-		if ( posn = str.find_last_of( "pP" ); posn != string::npos ) {
+		if ( posn = str.find_last_of( "pP" ), posn != string::npos ) {
 			ltype = 5; str.erase( posn, 1 );
 		// size_t
-		} else if ( posn = str.find_last_of( "zZ" ); posn != string::npos ) {
+		} else if ( posn = str.find_last_of( "zZ" ), posn != string::npos ) {
 			Unsigned = true; type = 2; ltype = 4; str.erase( posn, 1 );
 		// signed char
-		} else if ( posn = str.rfind( "hh" ); posn != string::npos ) {
+		} else if ( posn = str.rfind( "hh" ), posn != string::npos ) {
 			type = 1; str.erase( posn, 2 );
 		// signed char
-		} else if ( posn = str.rfind( "HH" ); posn != string::npos ) {
+		} else if ( posn = str.rfind( "HH" ), posn != string::npos ) {
 			type = 1; str.erase( posn, 2 );
 		// short
-		} else if ( posn = str.find_last_of( "hH" ); posn != string::npos ) {
+		} else if ( posn = str.find_last_of( "hH" ), posn != string::npos ) {
 			type = 0; str.erase( posn, 1 );
 		// int (natural number)
-		} else if ( posn = str.find_last_of( "nN" ); posn != string::npos ) {
+		} else if ( posn = str.find_last_of( "nN" ), posn != string::npos ) {
 			type = 2; str.erase( posn, 1 );
 		} else if ( str.rfind( "ll" ) != string::npos || str.rfind( "LL" ) != string::npos ) {
