mp-coro
main
Coroutine support tools
mp-coro
bits
get_awaiter.h
Go to the documentation of this file.
1
// The MIT License (MIT)
2
//
3
// Copyright (c) 2021 Mateusz Pusz
4
//
5
// Permission is hereby granted, free of charge, to any person obtaining a copy
6
// of this software and associated documentation files (the "Software"), to deal
7
// in the Software without restriction, including without limitation the rights
8
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
// copies of the Software, and to permit persons to whom the Software is
10
// furnished to do so, subject to the following conditions:
11
//
12
// The above copyright notice and this permission notice shall be included in all
13
// copies or substantial portions of the Software.
14
//
15
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
// SOFTWARE.
22
23
#pragma once
24
25
#include <utility>
26
27
namespace
mp_coro::detail
{
28
29
/// Apply member `operator co_await` if it exists, otherwise, apply global
30
/// `operator co_await` if it exists, otherwise, simply forward @p awaitable.
31
template
<
typename
T>
32
decltype
(
auto
)
get_awaiter
(T &&
awaitable
) {
33
if
constexpr
(
requires
{ std::forward<T>(
awaitable
).operator
co_await
(); })
34
return
std::forward<T>(
awaitable
).operator
co_await
();
35
else
if
constexpr
(
requires
{
operator
co_await
(std::forward<T>(
awaitable
)); })
36
return
operator
co_await
(std::forward<T>(
awaitable
));
37
else
38
return
std::forward<T>(
awaitable
);
39
}
40
41
}
// namespace mp_coro::detail
mp_coro::awaitable
Definition:
concepts.h:78
mp_coro::detail
Definition:
get_awaiter.h:27
mp_coro::detail::get_awaiter
decltype(auto) get_awaiter(T &&awaitable)
Apply member operator co_await if it exists, otherwise, apply global operator co_await if it exists,...
Definition:
get_awaiter.h:32
Generated by
1.9.5