#include <kumi/kumi.hpp>
#include <cstdint>
#include <iostream>
#include <type_traits>
#include <utility>
struct pixel
{
int r, g, b;
};
template<std::size_t I>
decltype(
auto)
get(pixel
const& p)
noexcept
{
if constexpr(I==0) return kumi::capture_field<"r">(p.r);
if constexpr(I==1) return kumi::capture_field<"g">(p.g);
if constexpr(I==2) return kumi::capture_field<"b">(p.b);
}
template<std::size_t I>
decltype(
auto)
get(pixel& p)
noexcept
{
if constexpr(I==0) return kumi::capture_field<"r">(p.r);
if constexpr(I==1) return kumi::capture_field<"g">(p.g);
if constexpr(I==2) return kumi::capture_field<"b">(p.b);
}
template<>
{};
template<>
struct std::tuple_size<pixel> : std::integral_constant<std::size_t,3>
{};
int main()
{
pixel a = { 37, 15, 27 };
std::cout << b << "\n";
}
constexpr auto to_record(Type &&r)
Converts a kumi::record_type to an instance kumi::record.
Definition convert.hpp:146
constexpr decltype(auto) get(record< Ts... > &&r) noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition record.hpp:395
Named wrapper over a type.
Definition field_capture.hpp:29
Opt-in traits for types behaving like a kumi::product_type.
Definition traits.hpp:61