Index: src/CodeGen/FixMain.cc
===================================================================
--- src/CodeGen/FixMain.cc	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/CodeGen/FixMain.cc	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -11,5 +11,5 @@
 // Last Modified By :
 // Last Modified On :
-// Update Count     : 0
+// Update Count     : 1
 //
 
@@ -39,5 +39,5 @@
 		if ( isMain( decl ) ) {
 			if ( main_declaration ) {
-				SemanticError( decl, "Multiple definition of main routine\n" );
+				SemanticError( decl, "Multiple definition of main routine" );
 			}
 			main_declaration = decl;
Index: src/CodeGen/FixNames.cc
===================================================================
--- src/CodeGen/FixNames.cc	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/CodeGen/FixNames.cc	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Wed Jul 20 11:49:00 2022
-// Update Count     : 24
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Dec 14 16:16:51 2023
+// Update Count     : 25
 //
 
@@ -57,5 +57,5 @@
 			int nargs = mutDecl->params.size();
 			if ( 0 != nargs && 2 != nargs && 3 != nargs ) {
-				SemanticError( functionDecl, "Main expected to have 0, 2 or 3 arguments\n" );
+				SemanticError( functionDecl, "Main expected to have 0, 2 or 3 arguments" );
 			}
 			ast::chain_mutate( mutDecl->stmts )->kids.push_back(
Index: src/Concurrency/Corun.cpp
===================================================================
--- src/Concurrency/Corun.cpp	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/Concurrency/Corun.cpp	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -9,7 +9,7 @@
 // Author           : Colby Parsons
 // Created On       : Monday October 9 15:16:42 2023
-// Last Modified By : Colby Parsons
-// Last Modified On : Monday October 9 15:16:42 2023
-// Update Count     : 0
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Dec 14 17:32:17 2023
+// Update Count     : 1
 //
 
@@ -57,8 +57,8 @@
     Stmt * postvisit( const CoforStmt * stmt ) {
         if ( !runnerBlockDecl || !coforRunnerDecl )
-            SemanticError( stmt->location, "To use cofor statements add #include <cofor.hfa>\n" );
+            SemanticError( stmt->location, "To use cofor statements add #include <cofor.hfa>" );
 
         if ( stmt->inits.size() != 1 )
-            SemanticError( stmt->location, "Cofor statements must have a single initializer in the loop control\n" );
+            SemanticError( stmt->location, "Cofor statements must have a single initializer in the loop control" );
 
         if ( !stmt->body )
@@ -77,9 +77,9 @@
         const DeclStmt * declStmtPtr = dynamic_cast<const DeclStmt *>(stmt->inits.at(0).get());
         if ( ! declStmtPtr )
-            SemanticError( stmt->location, "Cofor statement initializer is somehow not a decl statement?\n" );
+            SemanticError( stmt->location, "Cofor statement initializer is somehow not a decl statement?" );
 
         const Decl * declPtr = dynamic_cast<const Decl *>(declStmtPtr->decl.get());
         if ( ! declPtr )
-            SemanticError( stmt->location, "Cofor statement initializer is somehow not a decl?\n" );
+            SemanticError( stmt->location, "Cofor statement initializer is somehow not a decl?" );
 
         Type * initType = new TypeofType( new NameExpr( loc, declPtr->name ) );
@@ -246,5 +246,5 @@
     Stmt * postvisit( const CorunStmt * stmt ) {
         if ( !runnerBlockDecl || !coforRunnerDecl )
-            SemanticError( stmt->location, "To use corun statements add #include <cofor.hfa>\n" );
+            SemanticError( stmt->location, "To use corun statements add #include <cofor.hfa>" );
 
         if ( !stmt->stmt )
Index: src/Concurrency/Keywords.cpp
===================================================================
--- src/Concurrency/Keywords.cpp	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/Concurrency/Keywords.cpp	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -9,7 +9,7 @@
 // Author           : Andrew Beach
 // Created On       : Tue Nov 16  9:53:00 2021
-// Last Modified By : Andrew Beach
-// Last Modified On : Fri Mar 11 10:40:00 2022
-// Update Count     : 2
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Dec 14 18:02:25 2023
+// Update Count     : 6
 //
 
@@ -682,5 +682,5 @@
 
 	if ( 0 != decl->returns.size() ) {
-		SemanticError( decl->location, "Generator main must return void" );
+		SemanticError( decl->location, "Generator main must return void." );
 	}
 
@@ -789,5 +789,5 @@
 	case ast::SuspendStmt::Generator:
 		// Generator suspends must be directly in a generator.
-		if ( !in_generator ) SemanticError( stmt->location, "'suspend generator' must be used inside main of generator type." );
+		if ( !in_generator ) SemanticError( stmt->location, "\"suspend generator\" must be used inside main of generator type." );
 		return make_generator_suspend( stmt );
 	}
@@ -847,5 +847,5 @@
 
 	if ( !decl_suspend ) {
-		SemanticError( location, "suspend keyword applied to coroutines requires coroutines to be in scope, add #include <coroutine.hfa>\n" );
+		SemanticError( location, "suspend keyword applied to coroutines requires coroutines to be in scope, add #include <coroutine.hfa>." );
 	}
 	if ( stmt->then ) {
@@ -918,5 +918,5 @@
 			// If it is a monitor, then it is a monitor.
 			if( baseStruct->base->is_monitor() || baseStruct->base->is_thread() ) {
-				SemanticError( decl, "destructors for structures declared as \"monitor\" must use mutex parameters\n" );
+				SemanticError( decl, "destructors for structures declared as \"monitor\" must use mutex parameters " );
 			}
 		}
@@ -926,10 +926,10 @@
 	// Monitors can't be constructed with mutual exclusion.
 	if ( CodeGen::isConstructor( decl->name ) && is_first_argument_mutex ) {
-		SemanticError( decl, "constructors cannot have mutex parameters\n" );
+		SemanticError( decl, "constructors cannot have mutex parameters " );
 	}
 
 	// It makes no sense to have multiple mutex parameters for the destructor.
 	if ( isDtor && mutexArgs.size() != 1 ) {
-		SemanticError( decl, "destructors can only have 1 mutex argument\n" );
+		SemanticError( decl, "destructors can only have 1 mutex argument " );
 	}
 
@@ -945,5 +945,5 @@
 	// Check to if the required headers have been seen.
 	if ( !monitor_decl || !guard_decl || !dtor_guard_decl ) {
-		SemanticError( decl, "mutex keyword requires monitors to be in scope, add #include <monitor.hfa>\n" );
+		SemanticError( decl, "mutex keyword requires monitors to be in scope, add #include <monitor.hfa>." );
 	}
 
@@ -952,5 +952,5 @@
 	if ( isDtor && isThread( mutexArgs.front() ) ) {
 		if ( !thread_guard_decl ) {
-			SemanticError( decl, "thread destructor requires threads to be in scope, add #include <thread.hfa>\n" );
+			SemanticError( decl, "thread destructor requires threads to be in scope, add #include <thread.hfa>." );
 		}
 		newBody = addThreadDtorStatements( decl, body, mutexArgs );
@@ -987,5 +987,5 @@
 const ast::Stmt * MutexKeyword::postvisit( const ast::MutexStmt * stmt ) {
 	if ( !lock_guard_decl ) {
-		SemanticError( stmt->location, "mutex stmt requires a header, add #include <mutex_stmt.hfa>\n" );
+		SemanticError( stmt->location, "mutex stmt requires a header, add #include <mutex_stmt.hfa>." );
 	}
 	ast::CompoundStmt * body =
@@ -1547,5 +1547,5 @@
 	if ( !type->base->is_thread() ) return decl;
 	if ( !thread_decl || !thread_ctor_seen ) {
-		SemanticError( type->base->location, "thread keyword requires threads to be in scope, add #include <thread.hfa>" );
+		SemanticError( type->base->location, "thread keyword requires threads to be in scope, add #include <thread.hfa>." );
 	}
 	const ast::CompoundStmt * stmt = decl->stmts;
Index: src/ControlStruct/MultiLevelExit.cpp
===================================================================
--- src/ControlStruct/MultiLevelExit.cpp	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/ControlStruct/MultiLevelExit.cpp	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -10,6 +10,6 @@
 // Created On       : Mon Nov  1 13:48:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Dec 11 13:44:45 2023
-// Update Count     : 38
+// Last Modified On : Thu Dec 14 17:34:12 2023
+// Update Count     : 39
 //
 
@@ -254,5 +254,5 @@
 				if ( enclosing_control_structures.empty() ) {
 					  SemanticError( stmt->location,
-									 "'break' outside a loop, 'switch', or labelled block" );
+									 "\"break\" outside a loop, \"switch\", or labelled block" );
 				}
 				targetEntry = findEnclosingControlStructure( isBreakTarget );
@@ -268,5 +268,5 @@
 		// Ensure that selected target is valid.
 		if ( targetEntry == enclosing_control_structures.rend() || ( isContinue && ! isContinueTarget( *targetEntry ) ) ) {
-			SemanticError( stmt->location, toString( (isContinue ? "'continue'" : "'break'"),
+			SemanticError( stmt->location, toString( (isContinue ? "\"continue\"" : "\"break\""),
 							" target must be an enclosing ", (isContinue ? "loop: " : "control structure: "),
 							stmt->originalTarget ) );
@@ -279,10 +279,10 @@
 		// Check that target is valid.
 		if ( targetEntry == enclosing_control_structures.rend() ) {
-			SemanticError( stmt->location, "'fallthrough' must be enclosed in a 'switch' or 'choose'" );
+			SemanticError( stmt->location, "\"fallthrough\" must be enclosed in a \"switch\" or \"choose\"" );
 		}
 		if ( ! stmt->target.empty() ) {
 			// Labelled fallthrough: target must be a valid fallthough label.
 			if ( ! fallthrough_labels.count( stmt->target ) ) {
-				SemanticError( stmt->location, toString( "'fallthrough' target must be a later case statement: ",
+				SemanticError( stmt->location, toString( "\"fallthrough\" target must be a later case statement: ",
 														   stmt->originalTarget ) );
 			}
@@ -296,5 +296,5 @@
 		// Check if in switch or choose statement.
 		if ( targetEntry == enclosing_control_structures.rend() ) {
-			SemanticError( stmt->location, "'fallthrough' must be enclosed in a 'switch' or 'choose'" );
+			SemanticError( stmt->location, "\"fallthrough\" must be enclosed in a \"switch\" or \"choose\"" );
 		}
 
@@ -309,6 +309,6 @@
 		}
 		if ( ! foundDefault ) {
-			SemanticError( stmt->location, "'fallthrough default' must be enclosed in a 'switch' or 'choose'"
-						   "control structure with a 'default' clause" );
+			SemanticError( stmt->location, "\"fallthrough default\" must be enclosed in a \"switch\" or \"choose\""
+						   "control structure with a \"default\" clause" );
 		}
 		break;
@@ -338,5 +338,5 @@
 		// Check that fallthrough default comes before the default clause.
 		if ( ! targetEntry->isFallDefaultValid() ) {
-			SemanticError( stmt->location, "'fallthrough default' must precede the 'default' clause" );
+			SemanticError( stmt->location, "\"fallthrough default\" must precede the \"default\" clause" );
 		}
 		break;
@@ -521,5 +521,5 @@
 		assert(0);
 	}
-	SemanticError( stmt->location, "'return' may not appear in a %s", context );
+	SemanticError( stmt->location, "\"return\" may not appear in a %s", context );
 }
 
Index: src/GenPoly/Box.cpp
===================================================================
--- src/GenPoly/Box.cpp	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/GenPoly/Box.cpp	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -9,7 +9,7 @@
 // Author           : Andrew Beach
 // Created On       : Thr Oct  6 13:39:00 2022
-// Last Modified By : Andrew Beach
-// Last Modified On : Mon Oct  2 17:00:00 2023
-// Update Count     : 0
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Dec 14 17:42:17 2023
+// Update Count     : 7
 //
 
@@ -777,7 +777,6 @@
 		if ( !concrete ) {
 			// Should this be an assertion?
-			SemanticError( expr, toString( typeSubs,
-				"\nunbound type variable: ", typeVar->typeString(),
-				" in application " ) );
+			SemanticError( expr->location, "\nunbound type variable %s in application %s",
+						   toString( typeSubs ).c_str(), typeVar->typeString().c_str() );
 		}
 		arg = expr->args.insert( arg,
Index: src/InitTweak/FixInit.cpp
===================================================================
--- src/InitTweak/FixInit.cpp	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/InitTweak/FixInit.cpp	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -1057,5 +1057,6 @@
 	)
 	if ( ! diff.empty() ) {
-		SemanticError( stmt, std::string("jump to label '") + stmt->target.name + "' crosses initialization of " + (*diff.begin())->name + " " );
+		SemanticError( stmt->location, "jump to label \"%s\" crosses initialization of \"%s\".",
+					   stmt->target.name.c_str(), (*diff.begin())->name.c_str() );
 	} // if
 }
@@ -1076,6 +1077,5 @@
 
 bool checkWarnings( const ast::FunctionDecl * funcDecl ) {
-	// only check for warnings if the current function is a user-defined
-	// constructor or destructor
+	// only check for warnings if the current function is a user-defined constructor or destructor
 	if ( ! funcDecl ) return false;
 	if ( ! funcDecl->stmts ) return false;
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/Parser/DeclarationNode.cc	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 17 14:41:48 2023
-// Update Count     : 1405
+// Last Modified On : Thu Dec 14 19:05:17 2023
+// Update Count     : 1407
 //
 
@@ -632,19 +632,19 @@
 					dst->basictype = src->basictype;
 				} else if ( src->basictype != DeclarationNode::NoBasicType )
-					SemanticError( yylloc, string( "multiple declaration types \"" ) + DeclarationNode::basicTypeNames[ dst->basictype ] +
-								   "\" and \"" + DeclarationNode::basicTypeNames[ src->basictype ] + "\"." );
-
+					SemanticError( yylloc, "multiple declaration types \"%s\" and \"%s\".",
+								   DeclarationNode::basicTypeNames[ dst->basictype ],
+								   DeclarationNode::basicTypeNames[ src->basictype ] );
 				if ( dst->complextype == DeclarationNode::NoComplexType ) {
 					dst->complextype = src->complextype;
 				} else if ( src->complextype != DeclarationNode::NoComplexType )
-					SemanticError( yylloc, string( "multiple declaration types \"" ) + DeclarationNode::complexTypeNames[ src->complextype ] +
-								   "\" and \"" + DeclarationNode::complexTypeNames[ src->complextype ] + "\"." );
-
+					SemanticError( yylloc, "multiple declaration types \"%s\" and \"%s\".",
+								   DeclarationNode::complexTypeNames[ src->complextype ],
+								   DeclarationNode::complexTypeNames[ src->complextype ] );
 				if ( dst->signedness == DeclarationNode::NoSignedness ) {
 					dst->signedness = src->signedness;
 				} else if ( src->signedness != DeclarationNode::NoSignedness )
-					SemanticError( yylloc, string( "conflicting type specifier \"" ) + DeclarationNode::signednessNames[ dst->signedness ] +
-								   "\" and \"" + DeclarationNode::signednessNames[ src->signedness ] + "\"." );
-
+					SemanticError( yylloc, "conflicting type specifier \"%s\" and \"%s\".",
+								   DeclarationNode::signednessNames[ dst->signedness ],
+								   DeclarationNode::signednessNames[ src->signedness ] );
 				if ( dst->length == DeclarationNode::NoLength ) {
 					dst->length = src->length;
@@ -652,6 +652,7 @@
 					dst->length = DeclarationNode::LongLong;
 				} else if ( src->length != DeclarationNode::NoLength )
-					SemanticError( yylloc, string( "conflicting type specifier \"" ) + DeclarationNode::lengthNames[ dst->length ] +
-								   "\" and \"" + DeclarationNode::lengthNames[ src->length ] + "\"." );
+					SemanticError( yylloc, "conflicting type specifier \"%s\" and \"%s\".",
+								   DeclarationNode::lengthNames[ dst->length ],
+								   DeclarationNode::lengthNames[ src->length ] );
 			} // if
 			break;
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/Parser/ExpressionNode.cc	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -9,7 +9,7 @@
 // Author           : Peter A. Buhr
 // Created On       : Sat May 16 13:17:07 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Tue Apr  4 11:07:00 2023
-// Update Count     : 1083
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Dec 14 18:57:07 2023
+// Update Count     : 1087
 //
 
@@ -193,5 +193,5 @@
 
 #if ! defined(__SIZEOF_INT128__)
-	if ( type == 5 ) SemanticError( yylloc, "int128 constant is not supported on this target " + str );
+	if ( type == 5 ) SemanticError( yylloc, "int128 constant is not supported on this target \"%s\"", str.c_str() );
 #endif // ! __SIZEOF_INT128__
 
@@ -204,5 +204,5 @@
 			} else {									// hex int128 constant
 				unsigned int len = str.length();
-				if ( len > (2 + 16 + 16) ) SemanticError( yylloc, "128-bit hexadecimal constant to large " + str );
+				if ( len > (2 + 16 + 16) ) SemanticError( yylloc, "128-bit hexadecimal constant to large \"%s\"", str.c_str() );
 				// hex digits < 2^64
 				if ( len > (2 + 16) ) {
@@ -219,5 +219,5 @@
 			unsigned int len = str.length();
 			if ( type == 5 && len > 2 + 64 ) {
-				if ( len > 2 + 64 + 64 ) SemanticError( yylloc, "128-bit binary constant to large " + str );
+				if ( len > 2 + 64 + 64 ) SemanticError( yylloc, "128-bit binary constant to large \"%s\".", str.c_str() );
 				str2 = "0b" + str.substr( len - 64 );
 				str = str.substr( 0, len - 64 );
@@ -233,5 +233,5 @@
 			} else {									// octal int128 constant
 				unsigned int len = str.length();
-				if ( len > 1 + 43 || (len == 1 + 43 && str[0] > '3') ) SemanticError( yylloc, "128-bit octal constant to large " + str );
+				if ( len > 1 + 43 || (len == 1 + 43 && str[0] > '3') ) SemanticError( yylloc, "128-bit octal constant to large \"%s\"", str.c_str() );
 				char buf[32];
 				if ( len <= 1 + 21 ) {					// value < 21 octal digitis
@@ -266,5 +266,5 @@
 			unsigned int len = str.length();
 			if ( str.length() == 39 && str > (Unsigned ? "340282366920938463463374607431768211455" : "170141183460469231731687303715884105727") )
-				SemanticError( yylloc, "128-bit decimal constant to large " + str );
+				SemanticError( yylloc, "128-bit decimal constant to large \"%s\".", str.c_str() );
 			char buf[32];
 			if ( len <= 19 ) {							// value < 19 decimal digitis
@@ -502,5 +502,5 @@
 ast::Expr * build_field_name_FLOATING_FRACTIONconstant(
 		const CodeLocation & location, const string & str ) {
-	if ( str.find_first_not_of( "0123456789", 1 ) != string::npos ) SemanticError( yylloc, "invalid tuple index " + str );
+	if ( str.find_first_not_of( "0123456789", 1 ) != string::npos ) SemanticError( yylloc, "invalid tuple index \"%s\".", str.c_str() );
 	ast::Expr * ret = build_constantInteger( location,
 		*new string( str.substr(1) ) );
@@ -511,5 +511,5 @@
 ast::Expr * build_field_name_FLOATING_DECIMALconstant(
 		const CodeLocation & location, const string & str ) {
-	if ( str[str.size() - 1] != '.' ) SemanticError( yylloc, "invalid tuple index " + str );
+	if ( str[str.size() - 1] != '.' ) SemanticError( yylloc, "invalid tuple index \"%s\".", str.c_str() );
 	ast::Expr * ret = build_constantInteger(
 		location, *new string( str.substr( 0, str.size()-1 ) ) );
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/Parser/TypeData.cc	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Nov 26 15:51:05 2023
-// Update Count     : 681
+// Last Modified On : Thu Dec 14 18:59:12 2023
+// Update Count     : 684
 //
 
@@ -1496,8 +1496,8 @@
 				// type set => parameter name already transformed by a declaration names so there is a duplicate
 				// declaration name attempting a second transformation
-				if ( param->type ) SemanticError( param->location, string( "duplicate declaration name " ) + *param->name );
+				if ( param->type ) SemanticError( param->location, "duplicate declaration name \"%s\".", param->name->c_str() );
 				// declaration type reset => declaration already transformed by a parameter name so there is a duplicate
 				// parameter name attempting a second transformation
-				if ( ! decl->type ) SemanticError( param->location, string( "duplicate parameter name " ) + *param->name );
+				if ( ! decl->type ) SemanticError( param->location, "duplicate parameter name \"%s\".", param->name->c_str() );
 				param->type = decl->type;				// set copy declaration type to parameter type
 				decl->type = nullptr;					// reset declaration type
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/ResolvExpr/Resolver.cc	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 12:17:01 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Dec  9 17:45:57 2023
-// Update Count     : 249
+// Last Modified On : Thu Dec 14 18:44:43 2023
+// Update Count     : 251
 //
 
@@ -632,5 +632,6 @@
 						maybe_accept( mutDecl->init.get(), res );
 						if ( !res.core.result ) {
-							SemanticError( mutDecl, "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.\n" );
+							SemanticError( mutDecl, "Cannot include designations in the initializer for a managed Object.\n"
+										   "If this is really what you want, initialize with @=." );
 						}
 					}
Index: src/Validate/ReplaceTypedef.cpp
===================================================================
--- src/Validate/ReplaceTypedef.cpp	(revision 21ad568919335a8ff227abd4a4cc417f5bf5e51f)
+++ src/Validate/ReplaceTypedef.cpp	(revision ca9d65e54b7ed187b75dfe016b8d4e2debd19fa4)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jun 29 14:59:00 2022
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Nov 27 08:55:06 2023
-// Update Count     : 3
+// Last Modified On : Thu Dec 14 16:11:51 2023
+// Update Count     : 4
 //
 
@@ -152,5 +152,5 @@
 				|| ast::Pass<VarLenChecker>::read( t0 )
 				|| ast::Pass<VarLenChecker>::read( t1 ) ) {
-			SemanticError( decl->location, "Cannot redefine typedef: " + decl->name );
+			SemanticError( decl->location, "Cannot redefine typedef %s", decl->name.c_str() );
 		}
 	} else {
