use recursive definition, it's more standard conform

git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@768 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
syntheticpp 2006-10-25 20:40:40 +00:00
parent 07d6c5d61f
commit f643f9a5d8

View file

@ -27,466 +27,21 @@ namespace Loki
class T11=NullType,class T12=NullType,class T13=NullType,class T14=NullType,class T15=NullType,
class T16=NullType,class T17=NullType,class T18=NullType,class T19=NullType,class T20=NullType
>
struct Seq;
template<class T01>
struct Seq<T01>
{
typedef
Typelist<T01,
NullType
>
Type;
};
template<class T01,class T02>
struct Seq<T01,T02>
{
typedef
Typelist<T01,
Typelist<T02,
NullType
> >
Type;
};
template<class T01,class T02,class T03>
struct Seq<T01,T02,T03>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
NullType
> > >
Type;
};
template<class T01,class T02,class T03,class T04>
struct Seq<T01,T02,T03,T04>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
NullType
> > > >
Type;
};
template<class T01,class T02,class T03,class T04,class T05>
struct Seq<T01,T02,T03,T04,T05>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
NullType
> > > > >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06>
struct Seq< T01,T02,T03,T04,T05,
T06>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
NullType
> > > > >
>
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07>
struct Seq< T01,T02,T03,T04,T05,
T06,T07>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
NullType
> > > > >
> >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
NullType
> > > > >
> > >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
NullType
> > > > >
> > > >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09,T10>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
NullType
> > > > >
> > > > >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10,
class T11>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09,T10,
T11>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
Typelist<T11,
NullType
> > > > >
> > > > >
>
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10,
class T11,class T12>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09,T10,
T11,T12>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
Typelist<T11,
Typelist<T12,
NullType
> > > > >
> > > > >
> >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10,
class T11,class T12,class T13>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09,T10,
T11,T12,T13>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
Typelist<T11,
Typelist<T12,
Typelist<T13,
NullType
> > > > >
> > > > >
> > >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10,
class T11,class T12,class T13,class T14>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09,T10,
T11,T12,T13,T14>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
Typelist<T11,
Typelist<T12,
Typelist<T13,
Typelist<T14,
NullType
> > > > >
> > > > >
> > > >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10,
class T11,class T12,class T13,class T14,class T15>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09,T10,
T11,T12,T13,T14,T15>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
Typelist<T11,
Typelist<T12,
Typelist<T13,
Typelist<T14,
Typelist<T15,
NullType
> > > > >
> > > > >
> > > > >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10,
class T11,class T12,class T13,class T14,class T15,
class T16>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09,T10,
T11,T12,T13,T14,T15,
T16>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
Typelist<T11,
Typelist<T12,
Typelist<T13,
Typelist<T14,
Typelist<T15,
Typelist<T16,
NullType
> > > > >
> > > > >
> > > > >
>
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10,
class T11,class T12,class T13,class T14,class T15,
class T16,class T17>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09,T10,
T11,T12,T13,T14,T15,
T16,T17>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
Typelist<T11,
Typelist<T12,
Typelist<T13,
Typelist<T14,
Typelist<T15,
Typelist<T16,
Typelist<T17,
NullType
> > > > >
> > > > >
> > > > >
> >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10,
class T11,class T12,class T13,class T14,class T15,
class T16,class T17,class T18>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09,T10,
T11,T12,T13,T14,T15,
T16,T17,T18>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
Typelist<T11,
Typelist<T12,
Typelist<T13,
Typelist<T14,
Typelist<T15,
Typelist<T16,
Typelist<T17,
Typelist<T18,
NullType
> > > > >
> > > > >
> > > > >
> > >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10,
class T11,class T12,class T13,class T14,class T15,
class T16,class T17,class T18,class T19>
struct Seq< T01,T02,T03,T04,T05,
T06,T07,T08,T09,T10,
T11,T12,T13,T14,T15,
T16,T17,T18,T19>
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
Typelist<T11,
Typelist<T12,
Typelist<T13,
Typelist<T14,
Typelist<T15,
Typelist<T16,
Typelist<T17,
Typelist<T18,
Typelist<T19,
NullType
> > > > >
> > > > >
> > > > >
> > > >
Type;
};
template<class T01,class T02,class T03,class T04,class T05,
class T06,class T07,class T08,class T09,class T10,
class T11,class T12,class T13,class T14,class T15,
class T16,class T17,class T18,class T19,class T20>
struct Seq
{
typedef
Typelist<T01,
Typelist<T02,
Typelist<T03,
Typelist<T04,
Typelist<T05,
Typelist<T06,
Typelist<T07,
Typelist<T08,
Typelist<T09,
Typelist<T10,
Typelist<T11,
Typelist<T12,
Typelist<T13,
Typelist<T14,
Typelist<T15,
Typelist<T16,
Typelist<T17,
Typelist<T18,
Typelist<T19,
Typelist<T20,
NullType
> > > > >
> > > > >
> > > > >
> > > > >
Type;
};
private:
typedef typename Seq< T02, T03, T04, T05, T06, T07, T08, T09, T10,
T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>::Type
TailResult;
public:
typedef Typelist<T01, TailResult> Type;
};
template<>
struct Seq<>
{
typedef NullType Type;
};
} // namespace Loki