key_list.hpp type_traits serif/utils/dependencies/binding.hpp serif/utils/misc/traits/type_uniqueness.hpp serif/utils/types/type_list.hpp src/compile_time_checks/serif/utils/dependencies/key_list.cpp src/include/serif/utils/dependencies/computation.hpp src/include/serif/utils/dependencies/dependencies.hpp src/include/serif/utils/dependencies/detail/type_lists.hpp serif::utils::dependencies::KeyList serif::utils::dependencies::KeyListBindings< BindingsT, KeyList< KeyTs... > > serif::utils::dependencies::ResolveKeys< BindingsT, KeyList< KeyTs... > > serif serif::utils serif::utils::dependencies #pragmaonce #include<type_traits> #include"serif/utils/dependencies/binding.hpp" #include"serif/utils/misc/traits/type_uniqueness.hpp" #include"serif/utils/types/type_list.hpp" namespaceserif::utils::dependencies{ template<typename...KeyTs> structKeyList{ usingKeys=types::TypeList<KeyTs...>; }; template<typename...KeyTs> usingInputList=KeyList<KeyTs...>; template<typename...KeyTs> usingRequestedResults=KeyList<KeyTs...>; template<typenameT> inlineconstexprboolis_key_list_v=false; template<typename...KeyTs> inlineconstexprboolis_key_list_v<KeyList<KeyTs...>>=misc::traits::all_unique_types_v<KeyTs...>; template<typenameT> conceptIsKeyList=is_key_list_v<std::remove_cvref_t<T>>; template<typenameBindingsT,typenameKeysT> structKeyListBindings; template<typenameBindingsT,typename...KeyTs> structKeyListBindings<BindingsT,KeyList<KeyTs...>>: std::bool_constant<(BindingsWithBinding<BindingsT,KeyTs>&&...)>{}; template<typenameBindingsT,typenameKeysT> structResolveKeys; template<typenameBindingsT,typename...KeyTs> structResolveKeys<BindingsT,KeyList<KeyTs...>>{ usingtype=types::TypeList<bound_type_t<BindingsT, KeyTs>...>; }; template<typenameBindingsT,typenameKeysT> conceptSatisfiesKeyList=IsBindings<BindingsT>&&IsKeyList<KeysT>&&KeyListBindings<BindingsT, std::remove_cvref_t<KeysT>>::value; template<typenameBindingsT,typenameKeysT> requiresSatisfiesKeyList<BindingsT, KeysT> usingResolvedTargets=ResolveKeys<BindingsT, std::remove_cvref_t<KeysT>>::type; }