private static String constructBaseName(DemangledObject demangledObj) {
		String origName = demangledObj.getName();
		String name = origName.replaceFirst("_*", "");
		Demangled namespace = demangledObj.getNamespace();
		if (namespace != null) {
			if (name.endsWith("destructor'") ||
				name.startsWith("operator") ||
				name.startsWith("dtor$")) {
				String baseClassName = getBaseClass(namespace);
				if (baseClassName == null) {
					return null;
				}
				return baseClassName + "::" + origName;
			}
			String fullString = namespace.getNamespaceString();
			if (fullString != null && fullString.startsWith("std::")) {
				// Common containers, make sure we keep the whole name
				if (fullString.startsWith("std::vector") || fullString.startsWith("std::list") ||
					fullString.startsWith("std::map") || fullString.startsWith("std::set") ||
					fullString.startsWith("std::basic_string")) {
					return fullString + "::" + origName;
				}
			}
		}
		return name;
	}
If there exists an initial set of template parameters bracketed by '<' and '>'
in the given demangled name, strip them.
@param demangledObj is the object holding the demangled name
@return the stripped name or null if no parameters present
Ghidra/Features/FunctionID/src/main/java/ghidra/feature/fid/service/NameVersions.java