Automatic Differentiation
 
Loading...
Searching...
No Matches
is_tuple.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_PRIM_META_IS_TUPLE_HPP
2#define STAN_MATH_PRIM_META_IS_TUPLE_HPP
3
4#include <cstddef>
7#include <tuple>
8#include <type_traits>
9
10namespace stan {
11namespace math {
12namespace internal {
13
14template <typename... Types>
15struct is_tuple_impl : std::false_type {};
16
17template <typename... Types>
18struct is_tuple_impl<std::tuple<Types...>> : std::true_type {};
19
20template <template <class...> class TypeCheck, typename T>
21struct all_tuple_elements : std::false_type {};
22
23template <template <class...> class TypeCheck, typename... Types>
24struct all_tuple_elements<TypeCheck, std::tuple<Types...>>
25 : math::conjunction<TypeCheck<std::decay_t<Types>>...> {};
26} // namespace internal
27
28template <typename T>
29struct is_tuple : internal::is_tuple_impl<std::decay_t<T>> {};
30
31template <typename T>
40template <typename T>
42
46template <template <class...> class TypeCheck, typename T>
49
52template <typename T>
54
57template <typename... Types>
59
62template <typename... Types>
66} // namespace math
67
68template <typename T>
70
71template <typename T>
72inline constexpr bool is_tuple_v = math::is_tuple_v<T>;
73
80template <typename T, std::size_t N, typename = void>
81struct is_tuple_of_size : std::false_type {};
82
83template <typename T, std::size_t N>
84struct is_tuple_of_size<T, N, std::enable_if_t<stan::is_tuple_v<T>>>
85 : std::bool_constant<std::tuple_size_v<std::decay_t<T>> == N> {};
86
87template <typename T, std::size_t N>
89
96template <std::size_t N, typename Tuple, typename CheckType>
97inline constexpr bool is_inner_tuple_type_v = std::is_same_v<
98 std::decay_t<CheckType>,
99 std::decay_t<std::tuple_element_t<N, std::decay_t<Tuple>>>>;
100
101} // namespace stan
102
103#endif
require_t< is_tuple< std::decay_t< T > > > require_tuple_t
Require type satisfies is_tuple.
Definition is_tuple.hpp:41
require_all_not_t< is_tuple< std::decay_t< Types > >... > require_all_not_tuple_t
Require none of the types satisfy is_tuple.
Definition is_tuple.hpp:64
require_t< internal::all_tuple_elements< TypeCheck, std::decay_t< T > > > require_all_tuple_elements_t
Require all elements of a tuple satisfy TypeCheck
Definition is_tuple.hpp:48
require_all_t< is_tuple< std::decay_t< Types > >... > require_all_tuple_t
Require all of the types satisfy is_tuple.
Definition is_tuple.hpp:58
require_not_t< is_tuple< std::decay_t< T > > > require_not_tuple_t
Require type does not satisfy is_tuple.
Definition is_tuple.hpp:53
constexpr bool is_tuple_v
Definition is_tuple.hpp:32
std::enable_if_t<!Check::value > require_not_t
If condition is false, template is disabled.
std::enable_if_t<!math::disjunction< Checks... >::value > require_all_not_t
If all conditions are false, template is enabled.
constexpr bool is_tuple_v
Definition is_tuple.hpp:72
constexpr bool is_inner_tuple_type_v
Checks if the N-th element of a tuple is of the same type as CheckType.
Definition is_tuple.hpp:97
constexpr bool is_tuple_of_size_v
Definition is_tuple.hpp:88
std::enable_if_t< Check::value > require_t
If condition is true, template is enabled.
std::enable_if_t< math::conjunction< Checks... >::value > require_all_t
If all conditions are true, template is enabled Returns a type void if all conditions are true and ot...
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...
STL namespace.
Checks both that T is a tuple and that its size is N.
Definition is_tuple.hpp:81
Extends std::true_type when instantiated with zero or more template parameters, all of which extend t...