17template <
typename T, T v>
53template <
bool Condition, typename T =
void> struct
enable_if {};
65template <
bool Condition,
typename T =
void>
69template <
typename Base,
typename Derived>
struct is_base_of {
91template <
typename T,
typename U>
struct is_same {
96template <
typename T>
struct is_same<T, T> {
110template <
typename T,
typename F>
struct conditional<false, T, F> {
114template <
bool B,
typename T,
typename F>
126template <
typename T, fl::size N>
struct is_array<T[N]> {
148template <
typename Ret,
typename... Args>
struct is_function<Ret(Args...)> {
152template <
typename Ret,
typename... Args>
157template <
typename Ret,
typename... Args>
162template <
typename Ret,
typename... Args>
235 return static_cast<T &&
>(
t);
242 "Cannot forward an rvalue as an lvalue");
243 return static_cast<T &&
>(
t);
259template <
typename T>
struct remove_cv<const volatile T> {
327#if defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER)
328 enum :
bool {
value = __is_enum(T) };
344template <>
struct is_pod<unsigned char> {
350template <>
struct is_pod<unsigned short> {
362template <>
struct is_pod<unsigned long> {
368template <>
struct is_pod<unsigned long long> {
391template <
typename C,
typename Ret,
typename... A>
393template <typename C, typename Ret, typename... A>
400template <
typename C,
typename Ret,
typename... A>
405template <
typename C,
typename Ret,
typename... A>
555 enum :
bool {
value = (char(-1) < char(0)) };
588template <
typename T>
struct is_signed<const volatile T> {
612template <
typename T,
typename Enable =
void>
616 "make_unsigned requires a non-bool integral type");
686template <
typename T,
typename U>
689 (
sizeof(T) >
sizeof(U)), T,
691 (
sizeof(U) >
sizeof(T)), U,
698template <
typename T,
typename U>
710template <
typename T,
typename U>
726template <
typename T,
typename U>
728 static constexpr bool same_size = (
sizeof(T) ==
sizeof(U));
795template <
typename T,
typename U>
799 !((is_same<T, i8>::value && is_same<U, u8>::value) ||
800 (is_same<T, u8>::value && is_same<U, i8>::value))
817template <
typename T,
typename U>
833template <
typename Base,
typename Derived>
847 template <
typename U,
void (U::*M)(U &)>
struct helper {};
897template <
typename T,
typename U,
typename... Rest>
910template <
typename T,
typename... Rest>
struct max_size<T, Rest...> {
925template <
typename T,
typename... Rest>
struct max_align<T, Rest...> {
936 enum : fl::size {
value =
alignof(T) };
942#if defined(__GNUC__) || defined(__clang__)
944template <
typename T>
struct is_enum {
945 enum :
bool { value = __is_enum(T) };
947#elif defined(_MSC_VER)
949template <
typename T>
struct is_enum {
950 enum :
bool { value = __is_enum(T) };
964#if defined(__GNUC__) || defined(__clang__)
966template <
typename T>
struct is_trivially_copyable {
967 enum :
bool { value = __is_trivially_copyable(T) };
969#elif defined(_MSC_VER)
971template <
typename T>
struct is_trivially_copyable {
972 enum :
bool { value = __is_trivially_copyable(T) };
990#if defined(__GNUC__) || defined(__clang__)
993 using type = __underlying_type(T);
995#elif defined(_MSC_VER) && _MSC_VER >= 1900
997template <
typename T>
struct underlying_type {
998 using type = __underlying_type(T);
1007template <
typename T>
1020#define FASTLED_DEFINE_POD_COMPARISON_OPERATOR(CLASS, OP) \
1021 template <typename T, typename U> \
1022 typename enable_if< \
1023 is_same<U, CLASS>::value && is_pod<T>::value, bool>::type \
1024 operator OP(const T &pod, const CLASS &obj) FL_NOEXCEPT { \
1025 return pod OP obj; \
1027 template <typename T> \
1028 typename enable_if<is_pod<T>::value, bool>::type operator OP( \
1029 const CLASS &obj, const T &pod) FL_NOEXCEPT { \
1030 return obj OP pod; \
1041 template<
typename T, fl::size Size = sizeof(T),
bool IsSigned = fl::is_
signed<T>::value>
1107template <
typename T,
typename =
void>
1111template <
typename C,
typename R,
typename... Args>
1115 static constexpr fl::size
arity =
sizeof...(Args);
1119template <
typename C,
typename R,
typename... Args>
1123 static constexpr fl::size
arity =
sizeof...(Args);
1127template <
typename R,
typename... Args>
1131 static constexpr fl::size
arity =
sizeof...(Args);
1135template <
typename R,
typename... Args>
1139 static constexpr fl::size
arity =
sizeof...(Args);
1144template <
typename T>
1153template <fl::size... Is>
1159template <fl::size N, fl::size... Is>
1162template <fl::size... Is>
1167template <fl::size N>
#define constexpr
Declares that it is possible to evaluate a value at compile time, introduced in C++11.
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
typename fl::conditional< IsSigned, typename fl::conditional< Size==1, fl::i8, typename fl::conditional< Size==2, fl::i16, typename fl::conditional< Size==4, fl::i32, typename fl::conditional< Size==8, fl::i64, fl::i64 >::type >::type >::type >::type, typename fl::conditional< Size==1, fl::u16, typename fl::conditional< Size==2, fl::u16, typename fl::conditional< Size==4, fl::u32, typename fl::conditional< Size==8, fl::u64, fl::u64 >::type >::type >::type >::type >::type type
typename common_type< T, U >::type common_type_t
typename underlying_type< T >::type underlying_type_t
constexpr int type_rank< T >::value
typename conditional< B, T, F >::type conditional_t
void swap_by_copy(T &a, T &b) FL_NOEXCEPT
typename remove_cv< T >::type remove_cv_t
add_rvalue_reference< T >::type declval() FL_NOEXCEPT
integral_constant< bool, false > false_type
integral_constant< bool, B > bool_constant
typename remove_pointer< T >::type remove_pointer_t
void swap(array< T, N > &lhs, array< T, N > &rhs) FL_NOEXCEPT
typename decay< T >::type decay_t
enable_if_t< is_base_of< Base, Derived >::value > is_derived
typename add_pointer< T >::type add_pointer_t
typename make_index_sequence_impl< N >::type make_index_sequence
constexpr T && forward(typename remove_reference< T >::type &t) FL_NOEXCEPT
typename enable_if< Condition, T >::type enable_if_t
integral_constant< bool, true > true_type
Base definition for an LED controller.
index_sequence< Is... > type
typename conditional<(sizeof(T) > sizeof(U)), T, typename conditional<(sizeof(U) > sizeof(T)), U, void >::type >::type type
typename common_type_impl< T, U >::type type
typename conditional<(type_rank< T >::value > type_rank< U >::value), T, typename conditional<(type_rank< U >::value > type_rank< T >::value), U, void >::type >::type type
typename integer_promotion_impl< T, U >::type type
#define FL_STATIC_ASSERT(...)
Portable compile-time assertion wrapper.
static constexpr fl::size arity
static constexpr fl::size arity
static constexpr fl::size arity
static constexpr fl::size arity
static constexpr bool t_signed
static constexpr bool u_signed
typename conditional< mixed_signedness &&t_signed, T, typename conditional< mixed_signedness &&u_signed, U, T >::type >::type type
static constexpr bool mixed_signedness
static constexpr bool value
typename remove_reference< T >::type U
typename conditional< is_array< U >::value, typename remove_extent< U >::type *, typename conditional< is_function< U >::value, typename add_pointer< U >::type, typename remove_cv< U >::type >::type >::type type
static constexpr bool value
static no test(...) FL_NOEXCEPT
static yes test(helper< U, &U::swap > *) FL_NOEXCEPT
static constexpr fl::size size() FL_NOEXCEPT
constexpr value_type operator()() const FL_NOEXCEPT
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static no test(...) FL_NOEXCEPT
static yes test(Base *) FL_NOEXCEPT
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
typename make_unsigned_detail::unsigned_by_size< sizeof(T)>::type type
FL_STATIC_ASSERT(is_integral< T >::value &&!is_same< typename remove_cv< T >::type, bool >::value, "make_unsigned requires a non-bool integral type")
static void apply(T &a, T &b) FL_NOEXCEPT
static void apply(T &a, T &b) FL_NOEXCEPT
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value
static constexpr int value