If, on the other hand, you're good to go with just the default implementations of all special member functions, then just don't declare them at all. This is a clear sign that you want the default behavior. It's also the least confusing. Consider the following type:
class PotentiallyMisleading {
public:
PotentiallyMisleading() = default;
PotentiallyMisleading(const PotentiallyMisleading &) = default;
PotentiallyMisleading &operator=(const PotentiallyMisleading &) = default;
PotentiallyMisleading(PotentiallyMisleading &&) = default;
PotentiallyMisleading &operator=(PotentiallyMisleading &&) = default;
~PotentiallyMisleading() = default;
private:
std::unique_ptr<int> int_;
};
Even though we defaulted all the members, the class is still non-copyable. That's because it has a unique_ptr member that is non-copyable itself. Fortunately, Clang will warn you about this, but GCC does not by default...