Потому что грамматика запрещает это:
template-declaration:
export_opt template< template-parameter-list > declaration
template-parameter-list:
template-parameter
parameter-declaration
type-parameter:
class identifier
class identifier = type-id
typename identifier
typename identifier = type-id
template < template-parameter-list > class identifier
template < template-parameter-list > class identifier = template-name
В качестве альтернативы вы можете подумать, что struct - это особый случай класса, в котором все члены являются публичными. Таким образом, включение его в список параметров шаблона не будет таким общим.