postfix-expression: primary-expression | postfix-expression "[" expression "]" | postfix-expression "(" expression-list? ")" | simple-type-specifier "(" expression-list? ")" | "typename" "::"? nested-name-specifier identifier "(" expression-list? ")" | "typename" "::"? nested-name-specifier "template"? template-id "(" expression-list? ")" | postfix-expression "." "template"? id-expression | postfix-expression "->" "template"? id-expression | postfix-expression "." pseudo-destructor-name | postfix-expression "->" pseudo-destructor-name | postfix-expression "++" | postfix-expression "--" | "dynamic_cast" "<" type-id ">" "(" expression ")" | "static_cast" "<" type-id ">" "(" expression ")" | "reinterpret_cast" "<" type-id ">" "(" expression ")" | "const_cast" "<" type-id ">" "(" expression ")" | "typeid" "(" expression ")" | "typeid" "(" type-id ")" |