[PATCH][C++] Fix constant reference in a lambda (PR c++/53488)
Fri Feb 15 18:11:00 GMT 2013
Hi, thanks for your patch, and sorry it took me so long to respond.
On 08/18/2012 11:02 AM, JiÅÃ PaleÄek wrote:
> The idea of the fix is to postpone the decision whether or not to
> capture later to the template instantiation. This is because until then,
> we cannot know if the variable fulfills the conditions for a constant
> expression or not. So the patch assumes that if the constant value is a
> VAR_DECL (which is what I've found to happen in the debugger, although
> I'm not sure this is the only case) and we are in a template
> declaration, it just leaves the id expression there as is.
Thanks, I've now committed a simpler version of this that doesn't even
bother calling integral_constant_value in templates.
> Then the patch fiddles with the capture list in template instantiation
> code. Because new captures can be added while processing the template,
> we need to concatenate them with the original list from the template,
> plus there's a small hack to avoid producing the
> lambda-to-function-pointer conversion operator while we still don't have
> the final capture list.
I think a cleaner way to deal with the conversion issue would be to
instantiate the capture list in instantiate_class_template_1 instead of
here, so that we can do it in between the members and the conversion op.
> I have produced two tests (in the patch) and ran the testsuite in the
> gcc subdirectory successfully. I've also tested the behavior on a
> testcase in the attached test.cpp file (it should print ok with all
> possible combinations of #defined macros).
Could you adjust the testcase so that it will work in the testsuite?
More information about the Gcc-patches