problematic example:

class A
{
public:
    void func1(){throw bad_alloc();};

    void func2()
    {
        try
        {
            int i;
            shared_ptr<void> shutdown(static_cast<void*>(0), bind(&A::func1, this));
        }
        catch(...)
        {};
    };
};

int main()
{
    A a1;
    a1.func2();
}