https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77896
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Ryan Johnson from comment #4)
> puts("\nWorks ok-ish:");
> Jekyl* x = new Jekyl;
> whatami(x);
> puts("\nJekyl?");
> delete x;
I think this would be OK if it did "delete (AlterEgo*)x" ... as written, I'm
not sure.
> puts("\nBad idea:");
> Jekyl j;
> j.toggle();
> j.toggle();
> whatami(&j);
This is undefined, because ~Jekyl is going to run on the stack object at the
end of the scope, but it's not a Jekyl at that point.
The bound member functions extension can be used to avoid repeated vtable
lookups for the same function:
https://gcc.gnu.org/onlinedocs/gcc/Bound-member-functions.html