10namespace threadschedule
14template <
typename T,
typename =
void>
20struct is_duration_impl<T, std::void_t<typename T::rep, typename T::period>> : std::true_type
25#if __cpp_concepts >= 201907L
30template <
typename F,
typename... Args>
31concept ThreadCallable = std::is_invocable_v<F, Args...>;
37concept ThreadIdentifiable =
requires(T t) {
38 { t.get_id() } -> std::convertible_to<std::thread::id>;
45concept Duration =
requires {
54concept PriorityType = std::is_integral_v<T>;
60concept CPUSetType =
requires(T t) {
61 { t.size() } -> std::convertible_to<std::size_t>;
69template <
typename F,
typename... Args>
70constexpr bool ThreadCallable = std::is_invocable_v<F, Args...>;
73constexpr bool ThreadIdentifiable = std::is_same_v<decltype(std::declval<T>().get_id()), std::thread::id>;
79constexpr bool PriorityType = std::is_integral_v<T>;
83constexpr bool CPUSetType = std::is_same_v<T, std::vector<int>> || std::is_same_v<T, std::set<int>>;
101#if __cplusplus >= 202002L
109inline constexpr bool is_thread_like_v = is_thread_like<T>::value;
115using enable_if_thread_callable_t = std::enable_if_t<std::is_invocable_v<T>,
int>;
118using enable_if_duration_t = std::enable_if_t<is_duration_impl<T>::value,
int>;
Type trait for thread-like objects.