File: typeat.h

package info (click to toggle)
c%2B%2B-annotations 11.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 11,244 kB
  • sloc: cpp: 21,698; makefile: 1,505; ansic: 165; sh: 121; perl: 90
file content (36 lines) | stat: -rw-r--r-- 710 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#ifndef INCLUDED_TYPEAT_H_
#define INCLUDED_TYPEAT_H_

#include "typelist.h"

//TYPEAT
    template <size_t index, typename Typelist>
    struct TypeAt;
//=

//INVALID
    template <size_t index>
    struct TypeAt<index, TypeList<>>
    {
        static_assert(index < 0, "TypeAt index out of bounds");
        typedef TypeAt Type;
    };
//=

//ZERO
    template <typename Head, typename ...Tail>
    struct TypeAt<0, TypeList<Head, Tail...>>
    {
        typedef Head Type;
    };
//=

//TYPELIST
    template <size_t index, typename Head, typename ...Tail>
    struct TypeAt<index, TypeList<Head, Tail...>>
    {
        typedef typename TypeAt<index - 1, TypeList<Tail...>>::Type Type;
    };
//=

#endif