5#include <libcopp/utils/config/libcopp_build_features.h>
22#if defined(LIBCOPP_MACRO_ENABLE_STD_COROUTINE) && LIBCOPP_MACRO_ENABLE_STD_COROUTINE
24LIBCOPP_COPP_NAMESPACE_BEGIN
26template <
class TFUTURE>
27struct LIBCOPP_COPP_API_HEAD_ONLY some_ready {
29 using type = std::vector<element_type>;
32template <
class TFUTURE>
33struct LIBCOPP_COPP_API_HEAD_ONLY any_ready {
34 using element_type =
typename some_ready<TFUTURE>::element_type;
35 using type =
typename some_ready<TFUTURE>::type;
38template <
class TFUTURE>
39struct LIBCOPP_COPP_API_HEAD_ONLY all_ready {
40 using element_type =
typename some_ready<TFUTURE>::element_type;
41 using type =
typename some_ready<TFUTURE>::type;
44template <
class TELEMENT>
45struct LIBCOPP_COPP_API_HEAD_ONLY some_ready_remove_wrapper;
47template <
class TELEMENT>
48struct LIBCOPP_COPP_API_HEAD_ONLY some_ready_remove_wrapper<
std::reference_wrapper<TELEMENT>> {
49 using type = TELEMENT;
52template <
class TELEMENT>
53struct LIBCOPP_COPP_API_HEAD_ONLY some_ready_remove_wrapper<
gsl::not_null<TELEMENT*>> {
54 using type = TELEMENT;
57template <
class TELEMENT>
58struct LIBCOPP_COPP_API_HEAD_ONLY some_ready_remove_wrapper {
59 using type = TELEMENT;
62template <
class TCONTAINER>
63struct LIBCOPP_COPP_API_HEAD_ONLY some_ready_container {
64 using container_type =
typename std::decay<TCONTAINER>::type;
66 typename std::decay<typename some_ready_remove_wrapper<typename container_type::value_type>::type>::type;
68 using const_reference_type =
const value_type&;
73template <
class TELEMENT>
74struct LIBCOPP_COPP_API_HEAD_ONLY pick_some_reference;
76template <
class TELEMENT>
77struct LIBCOPP_COPP_API_HEAD_ONLY pick_some_reference<
std::reference_wrapper<TELEMENT>> {
78 inline static TELEMENT& unwrap(std::reference_wrapper<TELEMENT>& input)
noexcept {
return input.
get(); }
79 inline static const TELEMENT& unwrap(std::reference_wrapper<const TELEMENT>& input)
noexcept {
return input.get(); }
82template <
class TELEMENT>
83struct LIBCOPP_COPP_API_HEAD_ONLY pick_some_reference<
gsl::not_null<TELEMENT*>> {
88template <
class TELEMENT>
89struct LIBCOPP_COPP_API_HEAD_ONLY pick_some_reference {
90 inline static TELEMENT& unwrap(TELEMENT& input)
noexcept {
return input; }
91 inline static const TELEMENT& unwrap(
const TELEMENT& input)
noexcept {
return input; }
94LIBCOPP_COPP_NAMESPACE_END
std::shared_ptr< cli::cmd_option_value > value_type