30template <
class T, std::size_t... I>
31auto mask_impl(std::unsigned_integral
auto mask, T
const &t,
32 std::index_sequence<I...>) {
33 return T{((
mask & (1u << I)) ? get<I>(t) :
std::tuple_element_t<I, T>{})...};
54template <
class T> T
mask(std::unsigned_integral
auto mask, T
const &t) {
55 auto constexpr size_in_bits = std::numeric_limits<
decltype(
mask)>::digits;
56 static_assert(size_in_bits >= std::tuple_size_v<T>);
57 return detail::mask_impl(
mask, t,
58 std::make_index_sequence<std::tuple_size_v<T>>{});
T mask(std::unsigned_integral auto mask, T const &t)
Pick elements of a tuple-like by a bit mask.