cs440-final/track.cpp

39 lines
706 B
C++

#include <cassert>
#include <iostream>
#include <ostream>
// 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;
// }
operator long long() { return counter; }
};
int main(void) {
A a;
assert(a == 0);
assert(a[] == -1);
assert(a[]() == 0);
assert(a[]()() == 1);
int i = a;
assert(i == 0);
i = a()()();
assert(i == 3);
return 0;
}