If GetType() is a static member function, or a member function
that does not use its this pointer (that is, uses no member data)
and does not rely on any side effects of construction (for example,
static usage counts), then this is merely poor style, but it will run
correctly.
Otherwise (mainly, if GetType() is a normal nonstatic member function),
we have a problem. Nonvirtual base classes are initialized in
left-to-right order as they are declared, so ArrayBase is initialized
before Container. Unfortunately, that means we’re trying to use a member
of the not-yet-initialized Container base subobject.
template<class T> class Array : _____________________________________________________________________
private ArrayBase, public Container typedef Array AIType; public: Array( size_t startingSize = 10 ) : Container( startingSize ), ArrayBase( Container::GetType() ),