@Override
	public String simplify(String input) {
		int templateDepth = 0;
		char[] transform = null;
		for (int i = 0; i < input.length(); ++i) {
			char c = input.charAt(i);
			if (Character.isLetter(c)) {
				continue;
			}
			else if (c == '<') {
				templateDepth += 1;
				continue;
			}
			else if (c == '>') {
				templateDepth -= 1;
				if (templateDepth < 0) {
					templateDepth = 0;
				}
				continue;
			}
			else if (c < 128) {
				int val = legalChars[c];
				if (val != 0) {
					if (((val & AFTER_FIRST_CHAR) != 0) && i > 0) {
						continue;		// Legal after first character
					}
					if (((val & FIRST_CHAR) != 0) && i == 0) {
						continue;		// Legal as first character
					}
					if (((val & TEMPLATE) != 0) && templateDepth > 0) {
						continue;		// Legal as template parameter
					}
					if (((val & OPERATOR) != 0) && i >= 8 && i <= 10) {
						if (input.startsWith("operator")) {
							continue;
						}
					}
				}
			}
			// If we reach here, the character is deemed illegal
			if (transform == null) {
				transform = new char[input.length()];
				input.getChars(0, input.length(), transform, 0);
			}
			transform[i] = '_';
		}
		if (transform == null) {
			return input;
		}
		return new String(transform);
	}
Replace illegal characters in the given name with '_'.  The transformer treats the name as a
C++ symbol. Letters and digits are generally legal. '~' is allowed at the start of the symbol.
Template parameters, surrounded by '&lt;' and '&gt;', allow additional special characters. 
Certain special characters are allowed after the keyword "operator".
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/IllegalCharCppTransformer.java