Type Traits
Some extra type traits utilities.
Caution
Imports <type_traits>.
Tip
To import use #include "atl/utils/type_traits.hpp".
abl::static_max and abl::static_min
Not a “type trait”, but a useful utility for getting the maximum or minimum of multiple values at compile time.
#include "atl/utils/type_traits.hpp"
static_assert(abl::static_max<1, 2, 3>::value == 3);
static_assert(abl::static_min<1, 2, 3>::value == 1);Or with abl::static_max_v and abl::static_min_v
static_assert(abl::static_max_v<1, 2, 3> == 3);
static_assert(abl::static_min_v<1, 2, 3> == 1);Empty abl::static_max holds 1 and abl::static_min holds 0.
abl::are_same and abl::are_unique
abl::are_same and abl::are_unique are type trait utilities that check if all types are the same or unique, respectively.
#include "atl/utils/type_traits.hpp"
static_assert(abl::are_same<int, int, int>::value);
static_assert(!abl::are_same<int, int, float>::value);
static_assert(abl::are_unique<int, float, double>::value);
static_assert(!abl::are_unique<int, int, double>::value);Or with abl::are_same_v and abl::are_unique_v
static_assert(abl::are_same_v<int, int, int>);
static_assert(!abl::are_same_v<int, int, float>);
static_assert(abl::are_unique_v<int, float, double>);
static_assert(!abl::are_unique_v<int, int, double>);abl::contains_type
abl::contains_type<T, Ts...> is a type trait utility that checks if a type T is contained within a variadic pack of types Ts....
#include "atl/utils/type_traits.hpp"
static_assert(abl::contains_type<int, int, float, double>::value);
static_assert(!abl::contains_type<int, float, double>::value);Or with abl::contains_type_v
static_assert(abl::contains_type_v<int, int, float, double>);
static_assert(!abl::contains_type_v<int, float, double>);