// { dg-do compile }

bool f();

struct counted_base {
    virtual void destroy() { }
    void release() { if (f()) destroy(); }
};

struct shared_count {
    shared_count() { }
    ~shared_count() { if (pi) pi->release(); }
    shared_count(shared_count& r) : pi(r.pi) { if (pi) pi->release(); }
    counted_base* pi;
};

struct Foo;

struct shared_ptr  {
    Foo& operator*() { return *ptr; }
    Foo* ptr;
    shared_count refcount;
};

struct Bar {
    Bar(Foo&, shared_ptr);
};

void g() {
    shared_ptr foo;
    new Bar(*foo, foo);
}

