13#ifndef WPIUTIL_WPI_TYPE_TRAITS_H
14#define WPIUTIL_WPI_TYPE_TRAITS_H
31 using UnderlyingT = std::remove_reference_t<T>;
35 !std::is_class_v<UnderlyingT> &&
36 !std::is_pointer_v<UnderlyingT> &&
37 !std::is_floating_point_v<UnderlyingT> &&
38 (std::is_enum_v<UnderlyingT> ||
39 std::is_convertible_v<UnderlyingT, unsigned long long>);
43template<
typename T,
typename Enable =
void>
54template<
typename T,
typename Enable =
void>
59 using type =
const std::remove_pointer_t<T> *;
62template <
typename T,
typename Enable =
void>
80template<
class Lambda,
int=(Lambda{}(), 0)>
Metafunction that determines whether the given type is either an integral type or an enumeration type...
Definition: type_traits.h:30
static const bool value
Definition: type_traits.h:34
typename std::enable_if< B, T >::type enable_if_t
Definition: core.h:256
detail namespace with internal helper functions
Definition: xchar.h:20
Definition: ntcore_cpp.h:26
constexpr bool is_constexpr(Lambda)
Definition: type_traits.h:81
const std::remove_pointer_t< T > * type
Definition: type_traits.h:59
If T is a pointer to X, return a pointer to const X.
Definition: type_traits.h:55
const T type
Definition: type_traits.h:55
T type
Definition: type_traits.h:49
If T is a pointer, just return it. If it is not, return T&.
Definition: type_traits.h:44
T & type
Definition: type_traits.h:44
typename add_const_past_pointer< T >::type type
Definition: type_traits.h:68
Definition: type_traits.h:63
const T & type
Definition: type_traits.h:64
Definition: type_traits.h:73
T t
Definition: type_traits.h:74