21 Mixin Chain
Consider that some $mixins are defined (the implementations are not shown):
$mixin M1<typename T> { [implementation] };
$mixin M2 { [implementation] };
$mixin M3 { [implementation] };
$mixin M4 { [implementation] };
In the following example, the mixin chain of class C refers to the ordered list of mixins
[M1<int> M2 M3 M4 M1<float> M3].
$class C mixin [M1<int> M2 M3 M4 M1<float> M3] {};
Note that a given mixin can appear more than once in a mixin chain.
[M1<int> M2 M3 M4 M1<float> M3] can be regarded as a convenient shorthand
for M3<M1<float,M4<M3<M2<M1<int,Base<C>>>>>>>,
where Base<C> is some system defined template class instantiated with C
that "seeds" the mixin chain.
The final class C is passed into the base of the mixin chain to implicitly support the
curiously recurring template pattern for each mixin in the chain.
Mixins which in turn have mixin chains
A mixin can itself declare that it inherits from a mixin chain. For example
$mixin M5 mixin [M1<char> M2] {};
Anonymous mixins in the mixin chain
A mixin chain can directly contain anonymous mixins.