(See below for smart ptr, template, non-RTTI)
Deleting  a derived object via a base pointer is undefined behavior if base class has non-virtual dtor, with or without vtable.
This is well-known but it applies to a very specific situation. Many similar situations aren’t described by this rule —
[1a] This rule requires pointer delete. In contrast, automatic destruction of a non-ref “auto” variable (on stack) is unrelated.
[1b] This rule requires a heap object. Deleting a pointee on stack is a bug but it’s outside this rule.
[1c] This rule is about delete-expression, not delete
 if the object’s run-time type is base, then this rule is Inapplicable
 if the pointer is declared as pointer-to-derived, then Inapplicable, as there is no ambiguity which dtor to run
[3,4] if the object run time type is base, AND pointer is declared pointer-to-derived? Inapplicable — compiler or runtime would have failed much earlier before reaching this point.
 what if derived class has non-virtual dtor? Well, that implies base non-virtual too. So Yes applicable.
*) P62 [[effC++]] points out that even in the absence of virtual functions (i.e. in a world of non-RTTI objects), you can still hit this UB by deleting a subclass instance via a base pointer.
**) The same example also shows a derived class-template is considered just like a derived class. Let me spell out the entire rule — deleting an instance of a derived-class-template via a pointer to base-class-template is UB if the base class-template has a non-virtual dtor.
What if the pointee is deleted by a smart_ptr destructor? I think you can hit this UB.