They are implemented "with the same exact underlying system". In fact, you can actually declare a type using class
keyword and then define it using struct
keyword. Basically, they are exactly the same aside from the conceptual difference you already mentioned: default access rights.
I don't see though why would one call them "useless". The usage of the keyword became a matter of personal preference and/or coding standard. Like "use struct
fro POD types", or "use struct
for types with no incapsulation/access control".
With the same degree of success one can declare the built-in ->
operator "useless" because of its equivalence to *
+.
combination.