def _parse_initializer_list(self, name: str, open: str, close: str) -> Tuple[(List[Union[(ASTExpression, ASTBracedInitList)]], bool)]:
    self.skip_ws()
    if (not self.skip_string_and_ws(open)):
        return (None, None)
    if self.skip_string(close):
        return ([], False)
    exprs = []
    trailingComma = False
    while True:
        self.skip_ws()
        expr = self._parse_initializer_clause()
        self.skip_ws()
        if self.skip_string('...'):
            exprs.append(ASTPackExpansionExpr(expr))
        else:
            exprs.append(expr)
        self.skip_ws()
        if self.skip_string(close):
            break
        if (not self.skip_string_and_ws(',')):
            self.fail(("Error in %s, expected ',' or '%s'." % (name, close)))
        if ((self.current_char == close) and (close == '}')):
            self.pos += 1
            trailingComma = True
            break
    return (exprs, trailingComma)
def _parse_initializer_list(self, name: str, open: str, close: str) -> Tuple[(List[Union[(ASTExpression, ASTBracedInitList)]], bool)]:
    self.skip_ws()
    if (not self.skip_string_and_ws(open)):
        return (None, None)
    if self.skip_string(close):
        return ([], False)
    exprs = []
    trailingComma = False
    while True:
        self.skip_ws()
        expr = self._parse_initializer_clause()
        self.skip_ws()
        if self.skip_string('...'):
            exprs.append(ASTPackExpansionExpr(expr))
        else:
            exprs.append(expr)
        self.skip_ws()
        if self.skip_string(close):
            break
        if (not self.skip_string_and_ws(',')):
            self.fail(("Error in %s, expected ',' or '%s'." % (name, close)))
        if ((self.current_char == close) and (close == '}')):
            self.pos += 1
            trailingComma = True
            break
    return (exprs, trailingComma)