// { dg-do assemble  }
// GROUPS passed templates
template <class ET>
class ChainElem {
public:
  
  ET data;
};
template <class ET>
class Chain {
public:
  ChainElem<ET> *first;
  virtual ~Chain() {}
};
struct B {
};
struct X : B {
  ~X ();
};
struct TBNFexpression {
};
struct TCaseLabelPair {
};
struct TVariant {  
  Chain<TCaseLabelPair> CaseLabelList;
};
struct TCaseConstruct {
  Chain<TBNFexpression> TagFieldPrefixes;
  Chain<TVariant> Variants;
};
struct Production {
  X TypeName;
};
struct SimpleSyntax {
  Chain<Production> Productions;
};