Condy v1.6.0
C++ Asynchronous System Call Layer for Linux
Loading...
Searching...
No Matches
type_traits.hpp
Go to the documentation of this file.
1
4
5#pragma once
6
7#include <stop_token>
8#include <type_traits>
9#include <utility>
10
11namespace condy {
12
13namespace detail {
14
15template <typename T, typename Callback>
16concept HasStopCallback =
17 requires { typename T::template callback_type<Callback>; };
18
19template <typename T, typename Callback> struct stop_callback_traits;
20template <typename T, typename Callback>
21 requires HasStopCallback<T, Callback>
22struct stop_callback_traits<T, Callback> {
23 using type = typename T::template callback_type<Callback>;
24};
25template <typename T, typename Callback>
26 requires(!HasStopCallback<T, Callback> &&
27 std::is_same_v<T, std::stop_token>)
28struct stop_callback_traits<T, Callback> {
29 using type = std::stop_callback<Callback>;
30};
31
32} // namespace detail
33
34template <typename T, typename Callback>
35using stop_callback_t =
36 typename detail::stop_callback_traits<T, Callback>::type;
37
38template <typename Sender, typename Receiver>
39using operation_state_t =
40 decltype(std::declval<Sender &&>().connect(std::declval<Receiver &&>()));
41
42template <typename Receiver>
43using stop_token_t =
44 std::remove_cvref_t<decltype(std::declval<Receiver &>().get_stop_token())>;
45
46} // namespace condy
The main namespace for the Condy library.
Definition condy.hpp:30