#ifndef _LIBCPP___TYPE_TRAITS_IS_INTEGRAL_H
#define _LIBCPP___TYPE_TRAITS_IS_INTEGRAL_H
#include <__config>
#include <__type_traits/integral_constant.h>
#include <__type_traits/remove_cv.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
_LIBCPP_BEGIN_NAMESPACE_STD
template <class _Tp> struct __libcpp_is_integral { … };
template <> struct __libcpp_is_integral<bool> { … };
template <> struct __libcpp_is_integral<char> { … };
template <> struct __libcpp_is_integral<signed char> { … };
template <> struct __libcpp_is_integral<unsigned char> { … };
#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
template <> struct __libcpp_is_integral<wchar_t> { … };
#endif
#ifndef _LIBCPP_HAS_NO_CHAR8_T
template <> struct __libcpp_is_integral<char8_t> { … };
#endif
template <> struct __libcpp_is_integral<char16_t> { … };
template <> struct __libcpp_is_integral<char32_t> { … };
template <> struct __libcpp_is_integral<short> { … };
template <> struct __libcpp_is_integral<unsigned short> { … };
template <> struct __libcpp_is_integral<int> { … };
template <> struct __libcpp_is_integral<unsigned int> { … };
template <> struct __libcpp_is_integral<long> { … };
template <> struct __libcpp_is_integral<unsigned long> { … };
template <> struct __libcpp_is_integral<long long> { … };
template <> struct __libcpp_is_integral<unsigned long long> { … };
#ifndef _LIBCPP_HAS_NO_INT128
template <> struct __libcpp_is_integral<__int128_t> { … };
template <> struct __libcpp_is_integral<__uint128_t> { … };
#endif
#if __has_builtin(__is_integral)
template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_integral : _BoolConstant<__is_integral(_Tp)> { … };
# if _LIBCPP_STD_VER >= 17
is_integral_v;
# endif
#else
template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS is_integral : public _BoolConstant<__libcpp_is_integral<__remove_cv_t<_Tp> >::value> {};
# if _LIBCPP_STD_VER >= 17
template <class _Tp>
inline constexpr bool is_integral_v = is_integral<_Tp>::value;
# endif
#endif
_LIBCPP_END_NAMESPACE_STD
#endif