The type that a template takes as an argument must have external linkage. This means that you cannot instantiate a template with a locally-declared type:
int main(){ struct S { int current_state; char description[10]; } mystruct; queue qs; // 1. compilation error}
The line numbered 1 causes a compilation error because it attempts to instantiate a template with a locally-declared type, S. S has no linkage, and as such, it cannot serve as a valid template argument. To fix this, you should move the declaration of struct S outside of main():
struct S{ //