Trait class that identifies whether T is a standard-layout type.
A standard-layout type is a type with a simple linear data structure and access control that can easily be used to communicate with code written in other programming languages, such as C, either cv-qualified or not. This is true for scalar types, standard-layout classes and arrays of any such types.
A standard-layout class is a class (defined with class, struct or union) that:
has no virtual functions and no virtual base classes.
has the same access control (private, protected, public) for all its non-static data members.
either has no non-static data members in the most derived class and at most one base class with non-static data members, or has no base classes with non-static data members.
its base class (if any) is itself also a standard-layout class. And,
has no base classes of the same type as its first non-static data member.