L4Re Operating System Framework
Interface and Usage Documentation
•All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
type_list
1// vi:set ft=cpp: -*- Mode: C++ -*-
2#pragma once
3
4/*
5 * (c) 2012 Alexander Warg <warg@os.inf.tu-dresden.de>,
6 * economic rights: Technische Universität Dresden (Germany)
7 *
8 * License: see LICENSE.spdx (in this directory or the directories above)
9 */
10
11
12#include "type_traits"
13
14namespace cxx {
15
16template< typename ...T >
17struct type_list;
18
19template<>
20struct type_list<>
21{
22 typedef false_type head;
23 typedef false_type tail;
24};
25
26template<typename HEAD, typename ...TAIL>
27struct type_list<HEAD, TAIL...>
28{
29 typedef HEAD head;
30 typedef type_list<TAIL...> tail;
31};
32
33template<typename TYPELIST, template <typename T> class PREDICATE>
34struct find_type;
35
36template<template <typename T> class PREDICATE>
37struct find_type<type_list<>, PREDICATE>
38{
39 typedef false_type type;
40};
41
42template<typename TYPELIST, template <typename T> class PREDICATE>
43struct find_type
44{
45 typedef typename conditional<PREDICATE<typename TYPELIST::head>::value,
46 typename TYPELIST::head,
47 typename find_type<typename TYPELIST::tail, PREDICATE>::type>::type type;
48};
49
50template<typename TYPELIST, template <typename T> class PREDICATE>
51using find_type_t = typename find_type<TYPELIST, PREDICATE>::type;
52
53}
54
Our C++ library.
Definition arith:11