Support lambda templates.
authorAdam Butcher <adam@jessamine.co.uk>
Thu, 12 Sep 2013 18:54:52 +0000 (19:54 +0100)
committerAdam Butcher <abutcher@gcc.gnu.org>
Thu, 12 Sep 2013 18:54:52 +0000 (19:54 +0100)
commitc9469d539a89f1a488a743fdc45a06678dac0b2f
treec54b6a5dc08f5f58aea1692f3456b11ecaf8d3db
parent1c1880fcc6ca93f7ac589122448b605f4a3617af
Support lambda templates.

* parser.c (cp_parser_lambda_declarator_opt): Accept template parameter
list with std=c++1y or std=gnu++1y.
(cp_parser_lambda_body): Don't call 'expand_or_defer_fn' for lambda call
operator template to avoid adding template result to symbol table.
* lambda.c (lambda_function): Return template result if call operator is
a template.
(maybe_add_lambda_conv_op): Move declarations to point of use.  Refactor
operator call building in order to support conversion of a non-capturing
lambda template to a function pointer with help from ...
(prepare_op_call): ... this new function.
* decl2.c (check_member_template): Don't reject lambda call operator
template in local [lambda] class.
* pt.c (instantiate_class_template_1): Don't instantiate lambda call
operator template when instantiating lambda class.

From-SVN: r202539
gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/cp/lambda.c
gcc/cp/parser.c
gcc/cp/pt.c