On Thu, Oct 4, 2012 at 2:18 PM, James Dennett <span dir="ltr"><<a href="mailto:james.dennett@gmail.com" target="_blank">james.dennett@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">On Thu, Oct 4, 2012 at 1:10 PM, Richard Smith <<a href="mailto:richard@metafoo.co.uk">richard@metafoo.co.uk</a>> wrote:<br>
> On Thu, Oct 4, 2012 at 11:48 AM, James Dennett <<a href="mailto:james.dennett@gmail.com">james.dennett@gmail.com</a>><br>
> wrote:<br>
>><br>
>> On Thu, Oct 4, 2012 at 11:23 AM, Eli Friedman <<a href="mailto:eli.friedman@gmail.com">eli.friedman@gmail.com</a>><br>
>> wrote:<br>
>> > On Thu, Oct 4, 2012 at 4:05 AM, Abramo Bagnara<br>
>> > <<a href="mailto:abramo.bagnara@bugseng.com">abramo.bagnara@bugseng.com</a>> wrote:<br>
>> [...]<br>
>> >> Also, I've noted that lambda class fields generated for captured<br>
>> >> variables are anonymous instead to have the name of the captured<br>
>> >> variable.<br>
>> ><br>
>> > That's what the standard says, sorry.<br>
>><br>
>> Does it?  That doesn't match my understanding, which is that the<br>
>> standard doesn't specify the names.  Can you point at that text in the<br>
>> standard?<br>
><br>
><br>
> 5.1.2/14: "For each entity captured by copy, an unnamed non-static data<br>
> member is declared in the closure type".<br>
<br>
</div></div>Thanks for the reference.<br>
<br>
That wording makes lots of room under "as-if", as all that's required<br>
is that valid user code can't use (or be affected by) the names used<br>
for the closure type.  I see nothing in 5.1.2/14 that prevents an<br>
implementation naming the captured "foo" as "__captured__foo" or<br>
similar.  Well-defined code can't tell the difference between an<br>
unnamed member and a member with a reserved name, AFAIK.</blockquote><div><br></div><div>Yeah, I agree that that would be fine. 5.1.2/3 generally restricts similar changes to the closure type, but this case isn't observable behavior, so it seems permissible. What goal are you working towards here? (Is this for the benefit of a debugger?)</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">There don't even have to _be_ the specified members (and hopefully implementations<br>
will be smart enough not to make closure types which hold nothing but<br>
references to n local variables, when they could just re-use the stack<br>
frame).<br></blockquote><div><br></div><div>Well, the rule I quoted only applies to capture by copy, where there really do have to be the specified members, under 5.1.2/14 and 5.1.2/3.</div></div>