On 3/21/2016 6:07 PM, Paul Fultz II wrote:
On Monday, March 21, 2016 at 4:53:58 PM UTC-5, Edward Diener wrote:
On 3/21/2016 2:04 PM, Paul Fultz II wrote:
On Sunday, March 20, 2016 at 9:07:53 PM UTC-5, Gavin Lambert wrote:
... snipped
I think it's still true that mutable functions are useful in more cases -- despite being vulnerable to surprise copies and thread-safety issues.
(Having said that, this may be because boost::bind is used in most cases where const function objects would otherwise be used, so that custom function objects are typically only created where they need to be mutable; the code does not yet make extensive use of lambdas. But I don't think my experience is unique.)
I would like to note, that the const requirement only applies to function objects. You can pass member function pointers to member functions that are mutable.
You probably meant to say "You can pass member function pointers for mutable member functions". I would also strongly suggest you use the terms 'const' and 'non-const' when referring to member functions rather than 'const' and 'mutable' in your documentation. The reason I believe this is less confusing is because 'mutable' is a C++ keyword and as a keyword means something entirely different from how you are using it in your documentation.
How is it different? The mutable keyword is used to signify the function as non-const. That is when I write:
auto f = [] mutable {};
It is the equivalent of writing a class with a "non-const" call operator like this:
struct local_f{ void operator()() {} // No const here }; auto f = local_f{};
If I have a class: struct MyClass { void MyFunction( /* SomeParammeters etc. */ ); void AnotherFunction( /* SomeParammeters etc. */ ) const; } If I choose to discuss the 'constness' of member functions I don't refer to MyFunction as opposed to AnotherFunction as being 'mutable' but instead I say that MyFunction is 'non-const' and AnotherFunction is 'const'. Even you are using 'non-const' as in 'It is the equivalent of writing a class with a "non-const" call operator'. I do not think that member functions are ever referred to as 'mutable' as opposed to 'non-const' in common C++ parlance. The fact that lambda functions specify 'mutable' to refer to a 'non-const' lambda function as opposed to the default 'const' lambda function seems irrelevant to me here.