someone were to create a C++03 POD type and add a non-virtual member function, this type would no longer be a POD type, could not be statically initialized, and would be incompatible with C despite no change to the memory layout. C++11 relaxed several of the POD rules, by dividing the POD concept into two separate concepts: trivial and standard-layout. A type that is trivial can be statically initialized. It also means that it is valid to copy data around via memcpy, rather than having to use a copy constructor. The lifetime of a trivial type begins when its storage is defined, not when a constructor completes. A trivial class or struct is defined as one that: Has a trivial default constructor. This may use the default constructor syntax (SomeConstructor() = default;). Has trivial copy and move constructors, which may use the default syntax. Has trivial copy and move assignment operators, which may use the default syntax. Has a trivial destructor, which must not be virtual. Constructors are trivial only if there are no virtual member functions of the class and no virtual base classes. Copy/move operations also require all non-static data members to be trivial. A type that is standard-layout means that it orders and packs its members in a way that is compatible with C. A class or struct is standard-layout, by definition, provided: It has no virtual functions It has no virtual base classes All its non-static data members have the same access control (public, private, protected) All its non-static data members, including any in its base classes, are in the same one class in the hierarchy The above rules also apply to all the base classes and to all non-static data members in the class hierarchy It has no base classes of the same type as the first defined non-static data member A class/struct/union is considered POD if it is trivial, standard-layout, and all of its non-static data members and base classes are PODs. By separating these concepts, it becomes possible to give up one without losing the other. A class with complex move and copy constructors may not be trivial, but it could be standard-layout and thus interoperate with C. Similarly, a class with public and private non-static data members would not be standard-layout, but it could be trivial and thus memcpy-able. Core language build-time performance enhancements Extern template In C++03, the compiler must instantiate