def get_id(self, version: int, objectType: str=None, symbol: 'Symbol'=None) -> str:
    if (version == 1):
        res = []
        if objectType:
            if (objectType == 'function'):
                res.append(symbol.get_full_nested_name().get_id(version))
                res.append(self.decl.get_param_id(version))
                res.append(self.decl.get_modifiers_id(version))
                if (self.declSpecs.leftSpecs.constexpr or (self.declSpecs.rightSpecs and self.declSpecs.rightSpecs.constexpr)):
                    res.append('CE')
            elif (objectType == 'type'):
                res.append(symbol.get_full_nested_name().get_id(version))
            else:
                print(objectType)
                assert False
        else:
            if self.decl.is_function_type():
                raise NoOldIdError()
            res.append(self.declSpecs.get_id(version))
            res.append(self.decl.get_ptr_suffix_id(version))
            res.append(self.decl.get_param_id(version))
        return ''.join(res)
    res = []
    if objectType:
        if (objectType == 'function'):
            modifiers = self.decl.get_modifiers_id(version)
            res.append(symbol.get_full_nested_name().get_id(version, modifiers))
            if (version >= 4):
                templ = symbol.declaration.templatePrefix
                if (templ is not None):
                    typeId = self.decl.get_ptr_suffix_id(version)
                    returnTypeId = self.declSpecs.get_id(version)
                    res.append(typeId)
                    res.append(returnTypeId)
            res.append(self.decl.get_param_id(version))
        elif (objectType == 'type'):
            res.append(symbol.get_full_nested_name().get_id(version))
        else:
            print(objectType)
            assert False
    else:
        returnTypeId = self.declSpecs.get_id(version)
        typeId = self.decl.get_type_id(version, returnTypeId)
        res.append(typeId)
    return ''.join(res)
def get_id(self, version: int, objectType: str=None, symbol: 'Symbol'=None) -> str:
    if (version == 1):
        res = []
        if objectType:
            if (objectType == 'function'):
                res.append(symbol.get_full_nested_name().get_id(version))
                res.append(self.decl.get_param_id(version))
                res.append(self.decl.get_modifiers_id(version))
                if (self.declSpecs.leftSpecs.constexpr or (self.declSpecs.rightSpecs and self.declSpecs.rightSpecs.constexpr)):
                    res.append('CE')
            elif (objectType == 'type'):
                res.append(symbol.get_full_nested_name().get_id(version))
            else:
                print(objectType)
                assert False
        else:
            if self.decl.is_function_type():
                raise NoOldIdError()
            res.append(self.declSpecs.get_id(version))
            res.append(self.decl.get_ptr_suffix_id(version))
            res.append(self.decl.get_param_id(version))
        return .join(res)
    res = []
    if objectType:
        if (objectType == 'function'):
            modifiers = self.decl.get_modifiers_id(version)
            res.append(symbol.get_full_nested_name().get_id(version, modifiers))
            if (version >= 4):
                templ = symbol.declaration.templatePrefix
                if (templ is not None):
                    typeId = self.decl.get_ptr_suffix_id(version)
                    returnTypeId = self.declSpecs.get_id(version)
                    res.append(typeId)
                    res.append(returnTypeId)
            res.append(self.decl.get_param_id(version))
        elif (objectType == 'type'):
            res.append(symbol.get_full_nested_name().get_id(version))
        else:
            print(objectType)
            assert False
    else:
        returnTypeId = self.declSpecs.get_id(version)
        typeId = self.decl.get_type_id(version, returnTypeId)
        res.append(typeId)
    return .join(res)