Answered by:
Using value class with for_each

Question
-
When attempting to update an instance of a value class defined outside of a for_each call from the lambda expression in the for_each call the compiler returns error C3490 stating that the members of the instance cannot be modified as they are being accessed through a const object. The members of the instance can be readily modified by code outside of the for_each call. Is there a problem with value classes in this context??
Some example code:
Size mysize;
std::for_each(begin(mylist), end(mylist),
[mysize](childType^ child) { mysize.Width = 10.0; } );
Monday, October 24, 2011 6:14 PM
Answers
-
Add a mutable in there.
for_each(begin(mylist), end(mylist),
[mysize](Size child) mutable { mysize.Width = 10.0; } );
http://blog.voidnish.com- Proposed as answer by DavidLambMicrosoft employee, Moderator Wednesday, October 26, 2011 3:57 PM
- Marked as answer by Rob Caplan [MSFT]Microsoft employee, Moderator Friday, October 28, 2011 5:06 AM
Monday, October 24, 2011 8:36 PM
All replies
-
Add a mutable in there.
for_each(begin(mylist), end(mylist),
[mysize](Size child) mutable { mysize.Width = 10.0; } );
http://blog.voidnish.com- Proposed as answer by DavidLambMicrosoft employee, Moderator Wednesday, October 26, 2011 3:57 PM
- Marked as answer by Rob Caplan [MSFT]Microsoft employee, Moderator Friday, October 28, 2011 5:06 AM
Monday, October 24, 2011 8:36 PM -
Many thanks. I must confess that I was not fully aware of the subtle details of the C++ lambda expression syntax. However, it is interesting that lambda expressions capture variables passed by value as const by default. Comparing this to a simple function definition with arguments passed by value where the default is not const unless explicitly stated.Friday, October 28, 2011 8:50 PM
-
Many thanks. I must confess that I was not fully aware of the subtle details of the C++ lambda expression syntax. However, it is interesting that lambda expressions capture variables passed by value as const by default. Comparing this to a simple function definition with arguments passed by value where the default is not const unless explicitly stated.
Well that's the same with lambdas too. Parameters passed to the lambda function are not const by default, it's captured variables that are const by default. Functions do not have the concept of capturing variables, so there is no real comparable there.
http://blog.voidnish.comFriday, October 28, 2011 10:25 PM