result.hpp concepts expected memory type_traits utility serif/utils/types/type_list.hpp src/include/serif/utils/dependencies/detail/schema.hpp src/include/serif/utils/dependencies/incremental_computation.hpp serif::utils::dependencies::detail::Result serif::utils::dependencies::detail::Result< std::expected< ValueT, ErrorT > > serif::utils::dependencies::detail::Invocation serif::utils::dependencies::detail::Invocation< ComputationT, types::TypeList< Arguments... >, std::void_t< decltype(std::declval< const ComputationT & >().evaluate(std::declval< const ComputationArgument< ComputationT, Arguments > & >()...))> > serif serif::utils serif::utils::dependencies serif::utils::dependencies::detail #pragmaonce #include<concepts> #include<expected> #include<memory> #include<type_traits> #include<utility> #include"serif/utils/types/type_list.hpp" namespaceserif::utils::dependencies::detail{ template<typenameT> structResult{ usingValue=T; usingError=void; staticconstexprboolfallible=false; staticconstexprboolvalid=std::is_object_v<T>&&std::move_constructible<T>; }; template<typenameValueT,typenameErrorT> structResult<std::expected<ValueT,ErrorT>>{ usingValue=ValueT; usingError=ErrorT; staticconstexprboolfallible=true; staticconstexprboolvalid=std::is_object_v<ValueT>&&std::move_constructible<ValueT>; }; template<typenameComputationT,typenameTargetT> usingComputationArgument=std::conditional_t<ComputationT::owns_inputs,std::shared_ptr<constTargetT>,TargetT>; template<typenameComputationT,typenameArgumentsT,typename=void> structInvocation{ staticconstexprboolvalid=false; }; template<typenameComputationT,typename...Arguments> structInvocation<ComputationT,types::TypeList<Arguments...>,std::void_t<decltype(std::declval<constComputationT&>().evaluate(std::declval<constComputationArgument<ComputationT,Arguments>&>()...))>>: Result<std::remove_cv_t<decltype(std::declval<constComputationT&>().evaluate(std::declval<constComputationArgument<ComputationT,Arguments>&>()...))>> { }; }