registry.hpp tuple utility serif/equations/concepts.hpp src/compile_time_checks/serif/operators/plan.cpp src/include/serif/equations/equations.hpp src/include/serif/model/plan.hpp src/include/serif/utils/serialize/equations.hpp serif::equations::EquationRegistry serif serif::equations System for registering multiple equations. The idea here is that a model will be defined partly by an equation registry (e.g. all the equations that must be satisfied for a given model). Emily M. Boudreaux #pragmaonce #include<tuple> #include<utility> #include"serif/equations/concepts.hpp" namespaceserif::equations{ template<Equation...EquationTs> classEquationRegistryfinal{ public: static_assert(sizeof...(EquationTs)>0,"Anequationregistrymustcontainatleastoneequation."); usingEquations=utils::types::TypeList<EquationTs...>; usingRows=utils::types::TypeList<discretization::forms::Operand<typename EquationTs::Test>...>; static_assert(((OperandValues<Rows>::templateindex<typenameEquationTs::Test>()<sizeof...(EquationTs))&&...),"Anequationregistrymustdefineeachresidualrowexactlyonce."); explicitEquationRegistry(EquationTs...equations):m_equations(std::move(equations)...){} template<typenameFunctionT> voidfor_each(FunctionT&&function)const{ std::apply([&](constauto&...equations){ (function(equations),...); }, m_equations ); } template<EquationEquationT> [[nodiscard]]constEquationT&get()const{ returnstd::get<EquationT>(m_equations); } private: std::tuple<EquationTs...>m_equations; }; }//namespaceserif::equations