Skip to content

Commit 628a8bc

Browse files
refactor: Add missing concepts
1 parent 512ba53 commit 628a8bc

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

src/underlying/traits.cppm

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ template <typename T>
2525
concept std_integer =
2626
std::integral<std::remove_cv_t<T>> && (!std_bool<T>) && (!std_char<T>);
2727

28+
template <typename T>
29+
concept std_numeric = std_integer<T> || std_floating<T>;
30+
2831
template <typename T>
2932
concept std_underlying_type =
3033
std_bool<T> || std_char<T> || std_integer<T> || std_floating<T>;
@@ -122,5 +125,27 @@ concept underlying_type =
122125
underlying::details::has_std_rep_type<T> &&
123126
underlying::details::has_consistent_category<T>;
124127

128+
template <typename T>
129+
concept boolean_underlying_type =
130+
underlying_type<T> && (underlying::traits<std::remove_cv_t<T>>::kind ==
131+
underlying::category::boolean);
132+
133+
template <typename T>
134+
concept character_underlying_type =
135+
underlying_type<T> && (underlying::traits<std::remove_cv_t<T>>::kind ==
136+
underlying::category::character);
137+
138+
template <typename T>
139+
concept integer_underlying_type =
140+
underlying_type<T> && (underlying::traits<std::remove_cv_t<T>>::kind ==
141+
underlying::category::integer);
142+
143+
template <typename T>
144+
concept floating_underlying_type =
145+
underlying_type<T> && (underlying::traits<std::remove_cv_t<T>>::kind ==
146+
underlying::category::floating);
147+
148+
template <typename T>
149+
concept numeric_underlying_type = integer_underlying_type<T> || floating_underlying_type<T>;
125150
} // namespace mcpplibs::primitives
126151

0 commit comments

Comments
 (0)