1struct __shared_count {
2    __shared_count() { _M_pi = new int; }
3    int * _M_pi;
4};
5template<typename _Tp>
6class __shared_ptr {
7public:
8    __shared_ptr(_Tp* __p);
9    void reset(int * __p) {
10        __shared_ptr(__p).swap(*this);
11    }
12    void swap(__shared_ptr<_Tp>& __other) {
13        __other._M_refcount._M_pi = _M_refcount._M_pi;
14    }
15    __shared_count _M_refcount;
16};
17template<typename _Tp> class shared_ptr : public __shared_ptr<_Tp> {};
18int main() {
19    for (shared_ptr<int> *iter;;)
20    {
21        try {
22            (iter++)->reset(new int);
23        }
24        catch (...) {
25        }
26    }
27}
28