You can tell if a member function is user-declared by looking at the class definition. If you see the function, then it is user-declared.
For example:
class Derived : public Base {
~Derived() = default; // <-- see this? user-declared destructor
};
In contrast to:
class Derived : public Base {
// <-- see a destructor here? No. So not a user-declared destructor
};
The compiler generates the same destructor body in both cases, but the former example has a user-declared destructor, while the latter has an auto-generated destructor. The user-declared destructor is compiler-generated in this case, but it is generated at the user's request, so it is not auto-generated.
For "user-declared", it does not matter what's going on in the base class. If you see the destructor listed, as in the first example, then the compiler will not auto-generate move assignment or move construction. If you do not see the destructor listed, as in the second example, then the other criteria for auto-generation need to be checked.
The base class' influence on which members are auto-generated is restricted to the "is valid" criterion.