I think my POD definition is the same as yours.POD != aggregate. An aggregate class is a class with no user-declared constructors, no private or protected non-static data members, no base classes, and no virtual functions.
The following type is an aggregate but isn't a POD.
struct a{std::string s;};