The cppreference page for the named requirement of being TriviallyCopyable, in the subsection for classes, lists the following requirement:
Trivially copyable class
A trivially copyable class is a class that
- has at least one eligible copy constructor, move constructor, copy assignment operator, or move assignment operator,
- each eligible copy constructor is trivial
- each eligible move constructor is trivial
- each eligible copy assignment operator is trivial
- each eligible move assignment operator is trivial, and
- has a non-deleted trivial destructor.
so, if there's a trivial copy ctor but a non-trivial, say, move assignment operator - isn't the class trivially copyable? My intuition says that if you can construct an object of the same type by (trivially) memcpying the existing object (or assigning-by-memcpy to a constructed object) - that's trivial copyability.
No, not if the copy constructor and move assignment operator are eligible☆, according to the C++23 standard:
☆11.4.4. Special member functions
An eligible special member function is a special member function for which:
6.1. the function is not deleted,
6.2. the associated constraints, if any, are satisfied, and
6.3. no special member function of the same kind is more constrained