18#include <scoped_allocator>
22 template<
class Fn,
class... Ts, std::size_t... I>
23 requires std::invocable<Fn, decltype(std::get<I>(std::declval<std::tuple<Ts&&...>>()))...>
24 auto invoke_with_specified_args(Fn f, std::index_sequence<I...>, [[maybe_unused]] Ts&&... ts)
26 return f(std::get<I>(std::tuple<Ts&&...>{std::forward<Ts>(ts)...})...);
31 template<
class R,
class L,
class T>
38 template<
class R,
class L,
class T>
45 template<
class R,
class L,
class T>
52 template<
class R,
class L,
class T>
59 template<
class R,
class T>
66 template<
class R,
class T>
73 template<
class... Ts>
struct overloaded : Ts... {
using Ts::operator()...; };
79 constexpr static std::size_t size{1};
82 template<
alloc OuterAlloc,
alloc... InnerAlloc>
83 struct alloc_count<std::scoped_allocator_adaptor<OuterAlloc, InnerAlloc...>>
85 constexpr static std::size_t size{1 +
sizeof...(InnerAlloc)};
90 template<
class Tuple,
class Fn>
91 constexpr void for_each(Tuple&& t, Fn&& f)
93 [&]<std::size_t... Is>(std::index_sequence<Is...>){
94 ((std::forward<Fn>(f)(std::get<Is>(t))), ...);
95 }(std::make_index_sequence<std::tuple_size_v<std::remove_cvref_t<Tuple>>>{});
Concepts which are sufficiently general to appear in the sequoia namespace.
A concept for allocators.
Definition: Concepts.hpp:48
Definition: Utilities.hpp:78
Definition: Utilities.hpp:29
Definition: Utilities.hpp:73