alpaka
Abstraction Library for Parallel Kernel Acceleration
TypeListOps.hpp
Go to the documentation of this file.
1 /* Copyright 2022 Bernhard Manfred Gruber
2  * SPDX-License-Identifier: MPL-2.0
3  */
4 
5 #pragma once
6 
7 #include <type_traits>
8 
9 namespace alpaka::meta
10 {
11  namespace detail
12  {
13  template<typename List>
14  struct Front
15  {
16  };
17 
18  template<template<typename...> class List, typename Head, typename... Tail>
19  struct Front<List<Head, Tail...>>
20  {
21  using type = Head;
22  };
23  } // namespace detail
24 
25  template<typename List>
26  using Front = typename detail::Front<List>::type;
27 
28  template<typename List, typename Value>
29  struct Contains : std::false_type
30  {
31  };
32 
33  template<template<typename...> class List, typename Head, typename... Tail, typename Value>
34  struct Contains<List<Head, Tail...>, Value>
35  {
36  static constexpr bool value = std::is_same_v<Head, Value> || Contains<List<Tail...>, Value>::value;
37  };
38 } // namespace alpaka::meta
typename detail::Front< List >::type Front
Definition: TypeListOps.hpp:26