Hans Dembinski wrote:
Ok, yes, but tripping an assert (or raising a compile-time error) on an unsupported platform is not a nice solution, I think. Wouldn't it be better to provide a fallback that at least works somehow without crashing build or runtime?
Once you encounter the platform where it doesn't work, you'll have to provide a fallback, yes. Before that, not.
auto d = new Derived(); // inherits from Base with virtual dtor auto b = static_cast
(d); // still the same physical address, so should map to the same integer, no?
No. It's neither the same physical address in general, nor is it required to map to the same integer even if it were.
delete b; // correctly deletes Derived using vtable
If Base has a vtable, yes. You're not asserting that though.
I made tagged_ptr mimic std::unique_ptr, because I rely on having full control over (de)allocation to harvest the low bits of the pointer.
tagged_unique_ptr then perhaps?