VCCC  2024.05
VisualCamp Common C++ library
is_integer_like.hpp
Go to the documentation of this file.
1 //
2 // Created by yonggyulee on 2023/12/24.
3 //
4 
5 #ifndef VCCC_TYPE_TRAITS_IS_INTEGER_LIKE_HPP_
6 #define VCCC_TYPE_TRAITS_IS_INTEGER_LIKE_HPP_
7 
8 #include <limits>
9 #include <type_traits>
10 
14 
15 namespace vccc {
16 
19 
20 
26 template<typename T>
28  : disjunction<
29  std::is_integral<T>,
30  conjunction<
31  bool_constant<std::numeric_limits<T>::is_integer>,
32  bool_constant<std::numeric_limits<T>::is_specialized>
33  >
34  > {};
35 
36 template<typename T>
38  : disjunction<
39  conjunction<
40  std::is_integral<T>,
41  std::is_signed<T>
42  >,
43  conjunction<
44  bool_constant<std::numeric_limits<T>::is_integer>,
45  bool_constant<std::numeric_limits<T>::is_signed>,
46  bool_constant<std::numeric_limits<T>::is_specialized>
47  >
48  > {};
49 
50 template<typename T>
52  : disjunction<
53  conjunction<
54  std::is_integral<T>,
55  std::is_unsigned<T>
56  >,
57  conjunction<
58  bool_constant<std::numeric_limits<T>::is_integer>,
59  bool_constant<!std::numeric_limits<T>::is_signed>,
60  bool_constant<std::numeric_limits<T>::is_specialized>
61  >
62  > {};
63 
65 
66 } // namespace vccc
67 
68 #endif // VCCC_TYPE_TRAITS_IS_INTEGER_LIKE_HPP_
Definition: directory.h:12
Definition: disjunction.hpp:22
Check if type models integer-like type (C++ 20 requirement)
Definition: is_integer_like.hpp:34
Definition: is_integer_like.hpp:48
Definition: is_integer_like.hpp:62