Am 15.10.19 um 22:45 schrieb Emil Dotchevski via Boost:
The warning is not correct, and making the destructor virtual is wrong, because by design it is a bug to delete the base pointer type. I just disabled the warning for MSVC.
The warning is "Virtual class has non-virtual destructor so deleting it through a base class will lead to bugs", which is correct, isn't it? As mentioned: Neither the compiler nor a reviewer can confirm that a delete only ever happens through the most derived pointer because while error_info_container has a protected destructor (and hence cannot be deleted through a pointer to that class from outside), the error_info_container_impl has a public destructor and deletes itself through a this pointer. So if at any point in time someone derives from that class (which the missing final allows and there is no comment advising against that) you will have a bug. Don't get me wrong: I agree that it is not a bug here and everything is working as intended *currently*. I'm just saying that the warning is valid, and the Clang/GCC(?) warning is even more helpful in suggesting to make this class error_info_container_impl which it should be according to the design. While writing this: It seems MSVC already warns for the base class -.- Again this is a valid warning, but can be ignored for this specific class because the dtor is protected. I'm not a friend of globally disabling a warning (for the whole file) without an explanation. I'd expected it around error_info_container with a comment like `//Never deleted through base class pointer` as a note to future devs.