lists.hpp array cstddef serif/discretization/domain/ids/validation/concepts.hpp serif/utils/misc/std_helper/variadic_cleaning.hpp src/include/serif/discretization/domain/ids/lists/traits.hpp src/include/serif/discretization/domain/resolver.hpp src/include/serif/discretization/domain/schema/schemas.hpp serif::discretization::domain::ids::lists::DomainIDList serif::discretization::domain::ids::lists::BoundaryIDList serif serif::discretization serif::discretization::domain serif::discretization::domain::ids serif::discretization::domain::ids::lists This file defines the DomainIDList and BoundaryIDList types, specifically these types are used to project down compile time types to runtime values. Emily M. Boudreaux #pragmaonce #include<array> #include<cstddef> #include"serif/discretization/domain/ids/validation/concepts.hpp" #include"serif/utils/misc/std_helper/variadic_cleaning.hpp" namespaceserif::discretization::domain::ids::lists{ usingutils::misc::std_helper::CountVariadicArguments; template<IsDomainID...DomainIDTs> requiresvalidation::AreDistinctDomainIDs<DomainIDTs...> structDomainIDList{ staticconstexprstd::size_tcount=CountVariadicArguments<DomainIDTs...>(); [[nodiscard]]staticconstexprstd::array<DomainDescriptor,count>descriptors()noexcept{ return{DomainDescriptor{.name=DomainIDTs::domain_type::name,.ID=DomainIDTs::ID}...}; } }; template<IsBoundaryID...BoundaryIDTs> requiresvalidation::AreDistinctBoundaryIDs<BoundaryIDTs...> structBoundaryIDList{ staticconstexprstd::size_tcount=CountVariadicArguments<BoundaryIDTs...>(); [[nodiscard]]staticconstexprstd::array<BoundaryDescriptor,count>descriptors()noexcept{ return{BoundaryDescriptor{.name=BoundaryIDTs::boundary_type::name,.ID=BoundaryIDTs::ID}...}; } }; }