list_impl.hΒΆ

// Copyright (C) 2017, 2019, 2022 by Mark Melton
//

#ifndef CORE_TUPLE_LIST_IMPL_H
#define CORE_TUPLE_LIST_IMPL_H

#include <tuple>

namespace core::tp {
namespace impl {

// car, cdr, cons implementation
//
template<size_t... Xs>
struct sequence
{
    template<size_t X>
    using cons = sequence<X, Xs...>;
};

template<size_t start, size_t end>
struct range
{
    static_assert(start < end, "Range: start > end");
    using type = typename range<start + 1, end>::type::template cons<start>;
};

template<size_t start>
struct range<start, start>
{
    using type = sequence<>;
};

}; // end namespace impl
}; // end namespace core::tp

#endif