Skip to content

Work around issue with clang implicit instantiation in C++20 mode.

Scott Snyder requested to merge ssnyder/Gaudi:clangInstan-20231027 into master

GaudiHandleBase has a virtual destructor which is declared with `=default'. However. in C++20 mode, clang will then try to instiantiate all the virtual functions for classes derived from this whenever the declarations for those classes are seen. The upshot is that then using Gaudi handles with forward-declared classes doesn't work (even if the handle is only declared in the header but not used in any way).

It turns out that we can avoid this behavior by changing the declaration of the base class destructor to say {}' instead of =default'. (This is perhaps a clang bug, but the standard is not very clear on exactly when virtual members of the templated class are required to be or not to be implicitly instantiated.)

This is needed to fix many errors in the ATLAS C++20 clang build. See also ATLINFR-5113.

Merge request reports