Listing 1
#include <Typelist.h> // The outer class aggregates all types collected thus far. template< class HEAD, class TAIL > struct GenTypelistHelper { // Construct the typelist by appending the new TAIL // type to the typelist described in HEAD. typedef typename ::Loki::TL::Append< typename HEAD::Typelist, TAIL >::Result Typelist; // The inner class inherits from the outer, // so that the chain can continue. template< class NEXT > struct Add : GenTypelistHelper< GenTypelistHelper< HEAD, TAIL >, NEXT > { }; }; // Start with an empty typelist. struct GenTypelistStart { typedef ::Loki::NullType Typelist; }; // Get the chain started with the first type. template< class FIRST > struct GenTypelist : GenTypelistHelper< GenTypelistStart, FIRST > { };