According to the answers and comments for this question, when a reference variable is captured by value, the lambda object should make a copy of the referenced object, not t
This has just been fixed in gcc-4.7 trunk and gcc-4.6 branch. These should be available in gcc-4.7.0 (a while from now - still in stage 1) and gcc-4.6.2 (alas 4.6.1 just came out.)
But the intrepid could wait for the next snapshots or get a subversion copy.
See audit trail for details.
Compiled with VS 2010 gives:
value capture i: 10 ir: 10 &i: 0012FE74 &ir: 0012FE78 reference capture i: 10 ir: 10 &i: 0012FF60 &ir: 0012FF60
Looks like a bug for me.