mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 04:16:10 +00:00

clang's -Wdtor name is correct, but the standard may have not intended that meaning, according to https://bugs.llvm.org/show_bug.cgi?id=46979#c1. Some of the wording may have changed in 20/23, but we of course need to support c++17 as well as that's our default. One workaround would be to explicitly open the namespaces, then declare the destructor inside that. Another as shown in the bug report is to repeat the class name, without the template arguments, before the ::~. For example `Bar::Foo<T>::Foo::~Foo`. (this extra Foo is the injected class name https://en.cppreference.com/w/cpp/language/injected-class-name) I chose to do this because it's the smallest change. It works with gcc-13 and clang in c++17 and 20 modes (https://godbolt.org/z/fqs4fGE7T).