Насколько я понимаю, фундаментальные типы: Scalar и Arrays являются агрегатными, но как насчет пользовательских типов? По каким критериям я бы разделил их на две категории?
struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;