code: func (st *state) baseUnresolvedName() AST {
  	var n AST
  	if len(st.str) >= 2 && st.str[:2] == "on" {
  		st.advance(2)
  		n, _ = st.operatorName(true)
  	} else if len(st.str) >= 2 && st.str[:2] == "dn" {
  		st.advance(2)
  		if len(st.str) > 0 && isDigit(st.str[0]) {
  			n = st.sourceName()
  		} else {
  			n = st.demangleType(false)
  		}
  		n = &Destructor{Name: n}
  	} else if len(st.str) > 0 && isDigit(st.str[0]) {
  		n = st.sourceName()
  	} else {
  		// GCC seems to not follow the ABI here: it can have
  		// an operator name without on.
  		// See https://gcc.gnu.org/PR70182.
  		n, _ = st.operatorName(true)
  	}
  	if len(st.str) > 0 && st.str[0] == 'I' {
  		args := st.templateArgs()
  		n = &Template{Name: n, Args: args}
  	}
  	return n
  }
docs: // <base-unresolved-name> ::= <simple-id>
  //                        ::= on <operator-name>
  //                        ::= on <operator-name> <template-args>
  //                        ::= dn <destructor-name>
  //
  //<simple-id> ::= <source-name> [ <template-args> ]