type_traits
#include <type_traits>
template <typename T>
struct is_signed : std::integral_constant<bool, std::is_signed<T>::value> {};
static_assert(is_signed<int>::value);
static_assert(!is_signed<unsigned int>::value);#include <type_traits>
template <typename T>
struct is_floating_point : std::integral_constant<bool, std::is_floating_point<T>::value> {};
static_assert(is_floating_point<float>::value);
static_assert(!is_floating_point<int>::value);#include <type_traits>
template <typename T>
struct is_fundamental : std::integral_constant<bool, std::is_fundamental<T>::value> {};
static_assert(is_fundamental<int>::value);
static_assert(!is_fundamental<std::string>::value);