The special member functions affect the way objects of class type are created,
copied, moved, and destroyed, and how values can be converted to values of other types.
Often such special member functions are called implicitly.
For a class, its non-static data members, its non-virtual direct base classes,
and, if the class is not abstract ([class.abstract]), its virtual base
classes are called its potentially constructed subobjects.
A defaulted special member function is
constexpr-compatible
if the corresponding implicitly-declared special member function
would be a constexpr function.