#pragma once #include "tag_list_info.hpp" namespace sprawl { template struct TypeList { private: template struct getType_ { typedef std::false_type type; static_assert(t_CurIdx < 0, "TypeList::Get - out of bounds"); }; template struct getType_ { typedef typename getType_::type type; }; template struct getType_ { typedef t_FirstType type; }; template struct append_ { typedef TypeList type; }; template struct extend_; template struct extend_> { typedef TypeList type; }; public: static constexpr size_t size = sizeof...(t_Types); template using Get = typename getType_::type; template using Append = typename append_::type; template using Extend = typename extend_::type; }; template struct TagListInfo> { static constexpr size_t numElements = TypeList::size; template using Element = typename TypeList::template Get; }; }