#ifndef COMPILE_TIME_SEQUENCE #define COMPILE_TIME_SEQUENCE #include namespace obfs { template struct Sequence { using value_type = T; constexpr static T value = Val; using next = Sequence; template constexpr static T get() { if constexpr (Idx == 0) { return value; } else { return next::get(); } } }; template struct Sequence { using value_type = T; constexpr static T value = Val; template constexpr static T get() { static_assert(Idx == 0, "Couldn't get proper value from sequence"); return value; } }; template struct TypeSeq { using type = T; using next = TypeSeq; // template // using get = std::conditional_t>; }; template struct TypeSeq { using type = T; // template // using get = std::enable_if_t; }; template struct SeqPack { constexpr static std::size_t size = sizeof...(T); template using get = TypeSeq>...>; }; } #endif