SWIG uses these internally in type strings so needs to rewrite them
when they appear in expressions which get used in a type. This
already happens, but really deserves test coverage.
This was being rejected by SWIG because the type string contains '<'
not followed by '('. Drop this check as it should be unnecessary now
since the fixes for #1036 ensure that template parameters are enclosed
within '<(' and ')>'.
Fixes#2486Closes: #2575
Previously we had a hard-coded list of allowed combinations in the
grammar, but this suffers from combinatorial explosion, and results
in a vague `Syntax error in input` error for invalid (and missing)
combinations.
This means we now support a number of cases which are valid C++
but weren't supported.
Fixes#302Fixes#2079 (friend constexpr)
Fixes#2474 (virtual explicit)