template 'identifier' requires a tag-name
The template class specified by the identifier is followed by a union, struct, class, or enum without its own identifier.
template <class T> class D struct;