This, in a way, extends the existing "workaroud" by matching function
argument type names individually [instead of just matching "(args1...)"
with "(args2...)"]. For type name matching, a new method
CPlusPlusLanguage::TypeNamesEqual has been added. For now, this method
can only handle variations like:
<typename> * vs <typename>*
const <typename> vs <typename> const
const <typename> * const vs <typename> const * const
We can extend it to handle more complex name formats as needed.
The immediate benefit of this change is with evaluating std::map's
subscript operator when producer is GCC. Consider the following:
std::map<std::string, std::string> m; std::string s("1"); m[s] = "one"; ... ; // Break here
The command "expr m[s]" fails without this change if the producer is
GCC.