Running clang-tidy on the following (simplified) code:
struct Base {
Base() = default;
virtual ~Base() = default;
Base(const Base&) = delete;
Base& operator=(const Base&) = delete;
Base(Base&&) = delete; // not really needed
Base& operator=(Base&&) = delete; // not really needed
};
template<typename T>
struct Crtp : Base {};
struct Derived : Crtp<Derived> {
~Derived() noexcept override { /*...*/ }
};
Produces the following warning:
Class 'Derived' defines a non-default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions,hicpp-special-member-functions]
Why? Those member functions are deleted in the Base
class.
I even tried the following in .clang-tidy
:
CheckOptions: [
{ key: cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor, value: true },
{ key: hicpp-special-member-functions.AllowSoleDefaultDtor, value: true },
{ key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctions, value: true },
{ key: hicpp-special-member-functions.AllowMissingMoveFunctions, value: true },
{ key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctionsWhenCopyIsDeleted, value: true },
{ key: hicpp-special-member-functions.AllowMissingMoveFunctionsWhenCopyIsDeleted, value: true }
]
But it didn't make any difference.
Is it a bug in clang-tidy, or am I missing something?