#include #include // requires C++23 to compile class A { long long counter = 0; public: A() : counter{0} {} A operator()() { A ret = *this; ret.counter++; return ret; } // requires C++23 to compile A operator[](int _ = 0) { A ret = *this; ret.counter--; return ret; } friend std::ostream &operator<<(std::ostream &lhs, A const &rhs) { lhs << rhs.counter; return lhs; } }; int main(void) { A a; std::cout << a[] << std::endl; std::cout << a[]() << std::endl; std::cout << a[]()() << std::endl; return 0; }