|
|
@@ -8,6 +8,7 @@
|
|
|
#define LUWRA_TYPES_H_
|
|
|
|
|
|
#include "common.hpp"
|
|
|
+#include "compat.hpp"
|
|
|
|
|
|
#include <utility>
|
|
|
#include <tuple>
|
|
|
@@ -337,28 +338,11 @@ struct Value<Arbitrary> {
|
|
|
};
|
|
|
|
|
|
namespace internal {
|
|
|
- // C++11 implementation of C++14's `index_sequence` and `make_index_sequence`.
|
|
|
- template<size_t... Is>
|
|
|
- struct index_sequence {};
|
|
|
-
|
|
|
- template<size_t I, size_t... Is>
|
|
|
- struct make_index_sequence_impl {
|
|
|
- typedef typename make_index_sequence_impl<I - 1, I - 1, Is...>::type type;
|
|
|
- };
|
|
|
-
|
|
|
- template<size_t... Is>
|
|
|
- struct make_index_sequence_impl<0, Is...> {
|
|
|
- typedef index_sequence<Is...> type;
|
|
|
- };
|
|
|
-
|
|
|
- template<size_t I>
|
|
|
- using make_index_sequence = typename make_index_sequence_impl<I>::type;
|
|
|
-
|
|
|
template <typename>
|
|
|
struct StackPusher;
|
|
|
|
|
|
template <size_t I>
|
|
|
- struct StackPusher<index_sequence<I>> {
|
|
|
+ struct StackPusher<IndexSequence<I>> {
|
|
|
template <typename... T> static inline
|
|
|
size_t push(State* state, const std::tuple<T...>& package) {
|
|
|
using R = typename std::tuple_element<I, std::tuple<T...>>::type;
|
|
|
@@ -367,12 +351,12 @@ namespace internal {
|
|
|
};
|
|
|
|
|
|
template <size_t I, size_t... Is>
|
|
|
- struct StackPusher<index_sequence<I, Is...>> {
|
|
|
+ struct StackPusher<IndexSequence<I, Is...>> {
|
|
|
template <typename... T> static inline
|
|
|
size_t push(State* state, const std::tuple<T...>& package) {
|
|
|
return
|
|
|
- StackPusher<index_sequence<I>>::push(state, package)
|
|
|
- + StackPusher<index_sequence<Is...>>::push(state, package);
|
|
|
+ StackPusher<IndexSequence<I>>::push(state, package)
|
|
|
+ + StackPusher<IndexSequence<Is...>>::push(state, package);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
@@ -384,7 +368,8 @@ template <typename... A>
|
|
|
struct Value<std::tuple<A...>> {
|
|
|
static inline
|
|
|
size_t push(State* state, const std::tuple<A...>& value) {
|
|
|
- return internal::StackPusher<internal::make_index_sequence<sizeof...(A)>>::push(state, value);
|
|
|
+ using Seq = internal::MakeIndexSequence<sizeof...(A)>;
|
|
|
+ return internal::StackPusher<Seq>::push(state, value);
|
|
|
}
|
|
|
};
|
|
|
|