Open GuillaumeDua opened 7 months ago
namespace benchmark { template <template <std::size_t> typename, class> struct integral_trait_instancier; template <template <std::size_t> typename integral_trait, std::size_t ... N> struct integral_trait_instancier<integral_trait, std::index_sequence<N...>> : std::integral_constant<std::size_t, (integral_trait<N>::indexed::value + ...)> {}; }
Usage
template <typename ...> struct pack{}; struct A{}; struct B{}; struct C{}; template <std::size_t index> struct bench_starts_with { using indexed = std::integral_constant<std::size_t, index>; static_assert(starts_with_v< pack<A, B, C>, pack<A, B, C> >); static_assert(starts_with_v< pack<A, B, C, C>, pack<A, B, C> >); static_assert(not starts_with_v< pack<A, B, C>, pack<B, A, C> >); }; using benchmarked = benchmark::integral_trait_instancier< bench_starts_with, std::make_index_sequence<50> >::type;
Usage