Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision 710254033b5f823b285de273732b4504e1a84bc2)
+++ src/Common/utility.h	(revision 8abca0660e7023ad48db341fe98ce11969bb2e8a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul 24 14:28:19 2019
-// Update Count     : 41
+// Last Modified On : Tue Feb 11 13:00:36 2020
+// Update Count     : 50
 //
 
@@ -29,4 +29,5 @@
 #include <utility>
 #include <vector>
+#include <cstring>										// memcmp
 
 #include "Common/Indenter.h"
@@ -264,9 +265,9 @@
 }
 
-/// determines if `pref` is a prefix of `str`
-static inline bool isPrefix( const std::string & str, const std::string & pref ) {
+// determines if pref is a prefix of str
+static inline bool isPrefix( const std::string & str, const std::string & pref, unsigned int start = 0 ) {
 	if ( pref.size() > str.size() ) return false;
-	auto its = std::mismatch( pref.begin(), pref.end(), str.begin() );
-	return its.first == pref.end();
+    return 0 == memcmp( str.c_str() + start, pref.c_str(), pref.size() );
+	// return prefix == full.substr(0, prefix.size()); // for future, requires c++17
 }
 
Index: src/SymTab/Demangle.cc
===================================================================
--- src/SymTab/Demangle.cc	(revision 710254033b5f823b285de273732b4504e1a84bc2)
+++ src/SymTab/Demangle.cc	(revision 8abca0660e7023ad48db341fe98ce11969bb2e8a)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jul 19 12:52:41 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Dec 13 14:54:15 2019
-// Update Count     : 4
+// Last Modified On : Tue Feb 11 15:09:18 2020
+// Update Count     : 10
 //
 
@@ -19,4 +19,5 @@
 #include "CodeGen/GenType.h"
 #include "Common/PassVisitor.h"
+#include "Common/utility.h"								// isPrefix
 #include "Mangler.h"
 #include "SynTree/Type.h"
@@ -416,7 +417,13 @@
 
 			bool StringView::isPrefix(const std::string & pref) {
-				if ( pref.size() > str.size()-idx ) return false;
-				auto its = std::mismatch( pref.begin(), pref.end(), std::next(str.begin(), idx) );
-				if (its.first == pref.end()) {
+				// if ( pref.size() > str.size()-idx ) return false;
+				// auto its = std::mismatch( pref.begin(), pref.end(), std::next(str.begin(), idx) );
+				// if (its.first == pref.end()) {
+				// 	idx += pref.size();
+				// 	return true;
+				// }
+
+				// This update is untested because there are no tests for this code.
+				if ( ::isPrefix( str, pref, idx ) ) {
 					idx += pref.size();
 					return true;
@@ -429,5 +436,5 @@
 				PRINT( std::cerr << "====== " << str.size() << " " << str << std::endl; )
 				if (str.size() < 2+Encoding::manglePrefix.size()) return false; // +2 for at least _1 suffix
-				if (! isPrefix(Encoding::manglePrefix) || ! isdigit(str.back())) return false;
+				if ( ! isPrefix(Encoding::manglePrefix) || ! isdigit(str.back() ) ) return false;
 
 				// get name
