如何防止派生类型转换为其父类型?

struct A
{};

struct B : A
{
    operator A() const = delete; // not work
};

int main()
{
    B* p_derived = new B();
    delete p_derived; // ok

    A* p_base = new B();
    delete p_base; // How to make this a compile-time error?
}

A's definition cannot be changed and its destructor is not virtual; so the derived B's object shouldn't be deleted by a pointer to A.

I can't use struct B : protected A {};, because I want B to inherit all public members of A and keep them still public.

我的问题:

如何防止派生类型转换为其父类型?