* Fix array assignment expressions so they don't parse as structured bindings
Array assignment expressions were broken in df7bc44 which added more
support for structured binding declarators. We need to add a dynamic
precedence that is lower than that of an assignment expression so that
code is parsed as an assignment expression before it's parsed as a
structured binding.
* Just use -1 for structured binding dynamic precedence
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
For information about parameter packs, see
https://en.cppreference.com/w/cpp/language/parameter_pack
Most expansion loci should work with this commit since it is implemented
as an expression, so anywhere an expression is valid, parameter pack
expansions will be parsed.
This commit also adds support for:
* The sizeof... operator (as an alternative to sizeof)
* Lambda captures can optionally start with a default capture along with
other captures
* Lambda function declarators (the parameter list) are optional
Tests added for the following parameter pack expansion loci:
* Function parameter and argument lists
* Template argument lists
* Brace-enclosed initializers
* Base class specifiers and member initializer lists
* Lambda captures
This implements support for the following:
* Template constructors defined outside class definition (Fixes#50)
* Nested template function definitions outside class definition
* Template template parameters
* Name-specifiers are now (correctly) optional in template parameters