@Override
	protected void parseInternal() throws MDException {
		if (dmang.peek() != '?') {
			throw new MDException("Invalid ObjectCPP");
		}
		dmang.increment();
		if ((dmang.peek(0) == '?') && (dmang.peek(1) == '?')) { //??? prefix
			embeddedObjectFlag = true;
		}
		if ((dmang.peek(0) == '?') && (dmang.peek(1) == '@')) { //??@ prefix
			// MDMANG SPECIALIZATION USED.
			dmang.processHashedObject(this);
		}
		else {
			qualifiedName = new MDQualifiedBasicName(dmang);
			qualifiedName.parse();
			if (qualifiedName.isString()) {
				return;
			}
			if (dmang.peek() != MDMang.DONE) {
				int RTTINum = qualifiedName.getRTTINumber();
				typeInfo = MDTypeInfoParser.parse(dmang, RTTINum);
				if (qualifiedName.isTypeCast()) {
					typeInfo.setTypeCast();
				}
				typeInfo.parse();
				qualifiedName.setNameModifier(typeInfo);
				if (qualifiedName.isTypeCast()) {
					applyFunctionReturnTypeToTypeCastOperatorName();
				}
			}
		}
	}
Returns the {@link MDString} from the Basic Name if it is a symbol of that type; else
 returns null.
 @return the {@link MDString} or null if does not exist.
Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/object/MDObjectCPP.java