Just to note, the proposal the author lists as "so complicated" is actually just fixing an inconsistency in the grammar where "class" and "typename" are not always synonymous in the context of template declarations. Specifically:
template class Foo;
template class Foo;
Are the same. But, not when declaring a template with a parameter that is itself a template:
template class T> struct Foo; // Compiles
template typename T> struct Foo; // Does not compile
The proposal allows the second form to compile, fixing this inconsistency.