@@ -33,12 +33,43 @@ constexpr auto filter_tuple_types(std::tuple<std::type_identity<Types>...> /*unu
3333 std::tuple<std::type_identity<Types>>, std::tuple<>>{}...);
3434}
3535
36+ template <typename List, typename T, typename ... NeedsTypes>
37+ concept dependent_type_check = !IsInList<T, List>::value || (IsInList<NeedsTypes, List>::value && ...);
38+
39+ template <typename CompList>
40+ concept validate_component_types_c =
41+ dependent_type_check<CompList, Source, Node> && //
42+ dependent_type_check<CompList, Line, Node> && //
43+ dependent_type_check<CompList, Link, Node> && //
44+ dependent_type_check<CompList, Transformer, Node> && //
45+ dependent_type_check<CompList, GenericBranch, Node> && //
46+ dependent_type_check<CompList, AsymLine, Node> && //
47+ dependent_type_check<CompList, ThreeWindingTransformer, Node> && //
48+ dependent_type_check<CompList, Shunt, Node> && //
49+ dependent_type_check<CompList, SymGenerator, Node> && //
50+ dependent_type_check<CompList, AsymGenerator, Node> && //
51+ dependent_type_check<CompList, SymLoad, Node> && //
52+ dependent_type_check<CompList, AsymLoad, Node> && //
53+ dependent_type_check<CompList, SymVoltageSensor, Node> && //
54+ dependent_type_check<CompList, AsymVoltageSensor, Node> && //
55+ dependent_type_check<CompList, SymPowerSensor, Node, Line, AsymLine, GenericBranch, Transformer,
56+ ThreeWindingTransformer, SymGenerator, AsymGenerator, SymLoad, AsymLoad> && //
57+ dependent_type_check<CompList, AsymPowerSensor, Node, Line, AsymLine, Link, GenericBranch, Transformer,
58+ ThreeWindingTransformer, SymGenerator, AsymGenerator, SymLoad, AsymLoad> && //
59+ dependent_type_check<CompList, SymCurrentSensor, Line, AsymLine, Link, GenericBranch, Transformer,
60+ ThreeWindingTransformer> && //
61+ dependent_type_check<CompList, AsymCurrentSensor, Line, AsymLine, Link, GenericBranch, Transformer,
62+ ThreeWindingTransformer> && //
63+ dependent_type_check<CompList, TransformerTapRegulator, Node, Transformer, ThreeWindingTransformer> && //
64+ dependent_type_check<CompList, Fault, Node>;
65+
3666} // namespace detail
3767
3868template <class T , class U > class MainModelType ;
3969
4070// TODO: discussion on checking dependent types can also be done here.
4171template <class ... ExtraRetrievableType, class ... ComponentType>
72+ requires detail::validate_component_types_c<ComponentList<ComponentType...>>
4273class MainModelType <ExtraRetrievableTypes<ExtraRetrievableType...>, ComponentList<ComponentType...>> {
4374
4475 public:
0 commit comments