diff --git a/Core/include/Acts/Propagator/ActorConcepts.hpp b/Core/include/Acts/Propagator/ActorConcepts.hpp index abbe1ae1d8a0..8e2d56e79836 100644 --- a/Core/include/Acts/Propagator/ActorConcepts.hpp +++ b/Core/include/Acts/Propagator/ActorConcepts.hpp @@ -17,6 +17,11 @@ namespace Acts { template concept ActorHasResult = requires { typename actor_t::result_type; }; +template +struct ActorHasResultStruct { + static constexpr bool value = ActorHasResult; +}; + template concept ActorHasActWithoutResult = requires( diff --git a/Core/include/Acts/Propagator/ActorList.hpp b/Core/include/Acts/Propagator/ActorList.hpp index 1101caf2682c..19ad73786d48 100644 --- a/Core/include/Acts/Propagator/ActorList.hpp +++ b/Core/include/Acts/Propagator/ActorList.hpp @@ -9,16 +9,14 @@ #pragma once #include "Acts/Propagator/detail/actor_list_implementation.hpp" -#include "Acts/Utilities/detail/MPL/all_of.hpp" -#include "Acts/Utilities/detail/MPL/has_duplicates.hpp" -#include "Acts/Utilities/detail/MPL/type_collector.hpp" - -#include -#include - -namespace hana = boost::hana; +#include "Acts/Utilities/TypeList.hpp" namespace Acts { +/// @brief Extract the result type of an actor +template +struct ActorResultTypeExtractor { + using type = T::result_type; +}; /// @brief ActorList implementation to be used with the propagator /// @@ -26,18 +24,20 @@ namespace Acts { /// to define a list of different actors_t that are each /// executed during the stepping procedure template - requires( - detail::all_of_v::value...> && - detail::all_of_v::value...> && - detail::all_of_v::value...> && - !detail::has_duplicates_v) + requires((std::is_default_constructible::value && ...) && + (std::is_copy_constructible::value && ...) && + (std::is_move_constructible::value && ...) && + ((Types::count>::value == 1) && ...)) struct ActorList { /// @cond // This uses the type collector and unpacks using the `R` meta function + // template