-expr: namespaceSpecifier* funcName '(' (expr (',' expr)*)? ')' #funcExpr\r
- | expr '.' funcName '(' (expr (',' expr)*)? ')' #methodExpr\r
- | literal #litExpr\r
- | '(' expr ')' #parenExpr\r
- | expr '.' varName #dotExpr\r
- | prefix_op expr #prefixOpExpr\r
- | expr postfix_op #postfixOpExpr\r
- | expr binary_op expr #binaryOpExpr\r
- | expr '?' expr ':' expr #ternaryOpExpr\r
- | expr '[' expr ']' #bracketExpr\r
- | namespaceSpecifier* varName #identifierExpr\r
+expr: namespaceSpecifier* funcName genericInstantiation? '(' (expr (',' expr)*)? ')' #funcExpr\r
+ | expr '.' funcName genericInstantiation? '(' (expr (',' expr)*)? ')' #methodExpr\r
+ | literal #litExpr\r
+ | '(' expr ')' #parenExpr\r
+ | expr (dot | arrow) varName #dotExpr\r
+ | prefix_op expr #prefixOpExpr\r
+ | expr postfix_op #postfixOpExpr\r
+ | expr binary_op expr #binaryOpExpr\r
+ | expr '?' expr ':' expr #ternaryOpExpr\r
+ | expr '[' expr ']' #bracketExpr\r
+ | namespaceSpecifier* varName #identifierExpr\r