The guidelines say to use class when there is an invariant and struct otherwise. This is counter productive because if a struct without invariants suddenly gains an invariant, it should be changed to class. Which doesn't matter except that all forward declarations now also must change (despite years of more permissive compilers allowing a forward declaration of a class later defined as a struct, this is not standard).
Better to always use struct and never class, or the opposite. Always class is simpler because the first members declared in most classes are public, and struct saves you typing "public:" at the top of every class. But always class has the advantage that it is far more popular in C++ library code...including std::array which has no invariants.