#pragma once #include "libsyntax.h" #include namespace lib_composit { template class TypeList; template<> class TypeList<> { public: static QList> getRules() { return QList>(); } }; template requires std::derived_from class TypeList : public TypeList { public: static QList> getRules() { auto list = TypeList::getRules(); list.prepend(std::make_shared()); return list; } }; template class AnyR : public lib_syntax::Any, public TypeList { public: AnyR() : Any(TypeList::getRules()){ } }; template class SeqsR : public lib_syntax::Seqs, public TypeList { public: SeqsR() : Seqs(TypeList::getRules()){ } }; template class ReptR : public lib_syntax::Rept { public: ReptR() : Rept(std::make_shared(), min, max){ } }; template xproc = nullptr> requires std::derived_from && std::derived_from class TokenR : public lib_syntax::TokenMatch { public: TokenR() : TokenMatch(std::make_shared()){ } }; }