>> @@ -15402,6 +15450,8 @@ tsubst_decl (tree t, tree args, tsubst_flags_t >> complain, >> gcc_checking_assert (TYPE_MAIN_VARIANT (TREE_TYPE (ve)) >> == TYPE_MAIN_VARIANT (type)); >> SET_DECL_VALUE_EXPR (r, ve); >> + if (is_capture_proxy (t)) >> + type = TREE_TYPE (ve);
>That should have close to the same effect as the lambda_proxy_type >adjustment I was talking about, since that function basically returns >the TREE_TYPE of the COMPONENT_REF. But the underlying problem is that >finish_non_static_data_member assumes that 'object' is '*this', for >which you can trust the cv-quals; for auto&&, you can't. >capture_decltype has the same problem. I'm attaching a patch to address >this in both places. Regarding this, was my change actually okay, and was your change supposed to address it? I applied my patch to the latest commit in master yesterday and started tests and whatnot with this change commented out as I wasn't sure. It seems like my tests for constness of captures no longer works with or without this change commented out. If you wish I can go over everything again and figure out a new solution with your changes but stepping through all this code was quite a task that I'm weary of doing again. Even if the second time through won't be so arduous I would like to avoid it. You know what, I'll give it a go anyway but I don't want to spend too much time on it, I still have a few tests to clean up and this crash to fix. template <class T> void f() { int i; [=](this T&& self){ return i; }(); // error, unrelated } int main() { f<int>(); } If this crash doesn't take too long (I don't think it will, it seems straightforward enough) then I'll look at fixing the captures with a const xobject parameter bug the correct way. Alex