i18n
Loading...
Searching...
No Matches
TypeTraits.hpp
Go to the documentation of this file.
1
8#pragma once
9#include <type_traits>
10#include <tuple>
11#include <cstddef>
12
23template<typename T, typename B>
24struct is_derived_from: std::integral_constant<bool, std::is_base_of<B, T>::value> {};
25
36template<typename Base, typename... Derived>
38
48template<typename Base> // (Base), n = 0
49struct all_derived<Base> : std::true_type {};
50
62template<typename Base, typename First, typename... Rest> // (Base, {Item₀, …, Itemₙ}), n ≥ 0
63struct all_derived<Base, First, Rest...> :
64 std::integral_constant<bool, //use as a type
65 std::is_base_of<Base, First>::value // is_base_of
66 && all_derived<Base, Rest...>::value> {}; // recursive
67
78template <typename T>
79struct is_tuple : std::false_type {};
80
92template <typename... Args>
93struct is_tuple<std::tuple<Args...>> : std::true_type {};
94
95
101template <std::size_t... I>
103
110template <std::size_t N, std::size_t... I>
112
118template <std::size_t... I>
120 typedef index_sequence<I...> type;
121};
Trait to check if all types in a pack are derived from a base type.
Definition TypeTraits.hpp:37
Base Type to represent a sequence of compile time indice.
Definition TypeTraits.hpp:102
Trait to check if a type T derives from a base B.
Definition TypeTraits.hpp:24
Detect whether a type is a std::tuple or not.
Definition TypeTraits.hpp:79
index_sequence< I... > type
Definition TypeTraits.hpp:120
recursive template to generate the sequence
Definition TypeTraits.hpp:111