#include #include class Sample { const int value_ = 3; mutable bool ready_ = false; mutable int cached_ = 0; public: int doubled() const { if (!ready_) { cached_ = value_ * 2; ready_ = true; } return cached_; } }; int main() { const Sample sample; assert(sample.doubled() == 6); assert(sample.doubled() == 6); int original = 4; auto next = [original]() mutable { return ++original; }; const int captured_value = next(); assert(captured_value == 5 && original == 4); std::cout << sample.doubled() << ' ' << captured_value << ' ' << original << '\n'; }