The internal `Element` class implements the pure virtual interface
`IElement` which has no virtual destructor. `Element` has data members
but is deleted through an `Element*` so all members are destructed
correctly.
To convince the compiler this is all fine and to prevent the (unlikely)
case of someone inheriting from `Element` mark the class as `final`.