- #include <iostream> 
-   
- struct foo { 
-   
-    struct IncrementMinder 
-    { 
-       IncrementMinder(foo* fPtr) : fPtr_(fPtr) {} 
-       ~IncrementMinder() { ++(*fPtr_); } 
-       foo* fPtr_; 
-    }; 
-   
-    foo(int val) : value(val) {} 
-   
-    // Not correct. 
-    // const foo& operator++(int) { 
-    foo operator++(int) { 
-       IncrementMinder minder(this); 
-       return *this; 
-       // Destructor of minder takes care of ++(*this) 
-    } 
-   
-    foo& operator++() { 
-       ++value; 
-       return *this; 
-    } 
-   
-    operator int() { 
-       return 0; 
-    } 
-   
-    int value; 
-   
-   
- } bar{20}; 
-   
- void f(const foo& bar) { std::cout << "bar.value: " << bar.value << "\n"; } 
-   
- int main() 
- { 
-    f(bar); 
-   
-    std::cout << "Using post-increment...\n"; 
-   
-    f(bar++); 
-    f(bar);; 
-   
-    std::cout << "Using pre-increment...\n"; 
-   
-    f(++bar); 
-    f(bar); 
- } 
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IGZvbyB7CgogICBzdHJ1Y3QgSW5jcmVtZW50TWluZGVyCiAgIHsKICAgICAgSW5jcmVtZW50TWluZGVyKGZvbyogZlB0cikgOiBmUHRyXyhmUHRyKSB7fQogICAgICB+SW5jcmVtZW50TWluZGVyKCkgeyArKygqZlB0cl8pOyB9CiAgICAgIGZvbyogZlB0cl87CiAgIH07CgogICBmb28oaW50IHZhbCkgOiB2YWx1ZSh2YWwpIHt9CgogICAvLyBOb3QgY29ycmVjdC4KICAgLy8gY29uc3QgZm9vJiBvcGVyYXRvcisrKGludCkgewogICBmb28gb3BlcmF0b3IrKyhpbnQpIHsKICAgICAgSW5jcmVtZW50TWluZGVyIG1pbmRlcih0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgICAvLyBEZXN0cnVjdG9yIG9mIG1pbmRlciB0YWtlcyBjYXJlIG9mICsrKCp0aGlzKQogICB9CgogICBmb28mIG9wZXJhdG9yKysoKSB7CiAgICAgICsrdmFsdWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgfQoKICAgb3BlcmF0b3IgaW50KCkgewogICAgICByZXR1cm4gMDsKICAgfQoKICAgaW50IHZhbHVlOwoKCn0gYmFyezIwfTsKCnZvaWQgZihjb25zdCBmb28mIGJhcikgeyBzdGQ6OmNvdXQgPDwgImJhci52YWx1ZTogIiA8PCBiYXIudmFsdWUgPDwgIlxuIjsgfQoKaW50IG1haW4oKQp7CiAgIGYoYmFyKTsKCiAgIHN0ZDo6Y291dCA8PCAiVXNpbmcgcG9zdC1pbmNyZW1lbnQuLi5cbiI7CgogICBmKGJhcisrKTsKICAgZihiYXIpOzsKCiAgIHN0ZDo6Y291dCA8PCAiVXNpbmcgcHJlLWluY3JlbWVudC4uLlxuIjsKCiAgIGYoKytiYXIpOwogICBmKGJhcik7Cn0K