diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/codec/data.h | 10 | ||||
-rw-r--r-- | src/core/templates.h | 13 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/codec/data.h b/src/codec/data.h index 442fa26..f9bf31d 100644 --- a/src/codec/data.h +++ b/src/codec/data.h @@ -79,8 +79,14 @@ private: std::tuple<data<T,encode::Native>...> value_; public: template<string_literal literal> - data<T, encode::Native>& get(){ - return std::get<parameter_packe_index<literal, literals...>::value>(value_); + data< + parameter_pack_type< + parameter_pack_index< + literal, literals... + >::value + , T...>::type + , encode::Native>& get(){ + return std::get<parameter_pack_index<literal, literals...>::value>(value_); } constexpr size_t size() const { diff --git a/src/core/templates.h b/src/core/templates.h index 833bb5b..c363a16 100644 --- a/src/core/templates.h +++ b/src/core/templates.h @@ -13,4 +13,17 @@ struct parameter_pack_index<T, TL0, TL...> { static constexpr size_t value = 1u + parameter_pack_index<T, TL...>::value; }; + +template <size_t N, class... T> struct parameter_pack_type; + +template <class TN, class... T> struct parameter_pack_type<0, TN, T...> { + using type = TN; +}; + +template <size_t N, class TN, class... T> +struct parameter_pack_type<N, TN, T...> { + static_assert(sizeof...(T) > 0, "Exhausted parameters"); + using type = typename parameter_pack_type<N - 1, T...>::type; +}; + } |