Skip to content
Snippets Groups Projects

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

Merged Scott Snyder requested to merge ssnyder/Gaudi:clangInstan-20231027 into master
  1. Oct 30, 2023
    • scott snyder's avatar
      Work around issue with clang implicit instantiation in C++ mode. · 0c541ffa
      scott snyder authored and Marco Clemencic's avatar Marco Clemencic committed
      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.)
      
      See also ATLINFR-5113.
      0c541ffa
Loading