#include #include class Counter { int value_ = 0; public: Counter& set(int value) & { static_assert(std::is_same::value, "mutable this"); value_ = value; return *this; } int value() const { static_assert(std::is_same::value, "const this"); return value_; } bool same_object(const Counter& other) const { return this == &other; } }; int main() { Counter counter; Counter& result = counter.set(2).set(5); const Counter& view = counter; assert(&result == &counter); assert(view.value() == 5); assert(view.same_object(result)); }