Generally its a matter of convention/semantics than it is because of a technical reason.
The rationale is usually that struct
s are reserved for POD usage, helper data structures, "data payload"s, functors etc. Whereas class
es are for types that encapsulate non-trivial operations that usually have to respect some type of class invariant.