Previously, the code was parsing the type into the argname variable and then
when it found something (not "," or ")") following the type it swapped the name
into the type and parsed next part as the name.
However, when no name is provided, as it allowed in c++, if you're not planning
on using the parameter, or it is in a function declaration, then the actual
type was being left in the name variable and the type variable was empty.
As a result function signatures for references were being generated without
knowledge of the type, which is the important factor in disambiguating
overloaded functions.
Previously, the code was parsing the type into the argname variable and then
when it found something (not "," or ")") following the type it swapped the name
into the type and parsed next part as the name.
However, when no name is provided, as it allowed in c++, if you're not planning
on using the parameter, or it is in a function declaration, then the actual
type was being left in the name variable and the type variable was empty.
As a result function signatures for references were being generated without
knowledge of the type, which is the important factor in disambiguating
overloaded functions.
Previously the regex would fail to match c++ destructors, as the presence of a
"~" would mean that the "\b" would no longer match the start of a word.
Now we try to find the optional "~" first then continue with the word as
normal.
Previously the regex would fail to match c++ destructors, as the presence of a
"~" would mean that the "\b" would no longer match the start of a word.
Now we try to find the optional "~" first then continue with the word as
normal.