>().require_concept(
static_cast(p))
)
)
-> decltype(
declval>().require_concept(
static_cast(p))
);
};
#else // defined(ASIO_HAS_DEDUCED_REQUIRE_CONCEPT_MEMBER_TRAIT)
typedef T type;
#endif // defined(ASIO_HAS_DEDUCED_REQUIRE_CONCEPT_MEMBER_TRAIT)
};
template
ASIO_NODISCARD constexpr enable_if_t<
call_traits::overload == identity,
typename call_traits::result_type
>
operator()(T&& t, Property&&) const
noexcept(call_traits::is_noexcept)
{
return static_cast(t);
}
template
ASIO_NODISCARD constexpr enable_if_t<
call_traits::overload == call_member,
typename call_traits::result_type
>
operator()(T&& t, Property&& p) const
noexcept(call_traits::is_noexcept)
{
return static_cast(t).require_concept(static_cast(p));
}
template
ASIO_NODISCARD constexpr enable_if_t<
call_traits::overload == call_free,
typename call_traits::result_type
>
operator()(T&& t, Property&& p) const
noexcept(call_traits::is_noexcept)
{
return require_concept(static_cast(t), static_cast(p));
}
};
template
struct static_instance
{
static const T instance;
};
template
const T static_instance::instance = {};
} // namespace asio_require_concept_fn
namespace asio {
namespace {
static constexpr const asio_require_concept_fn::impl&
require_concept = asio_require_concept_fn::static_instance<>::instance;
} // namespace
typedef asio_require_concept_fn::impl require_concept_t;
template
struct can_require_concept :
integral_constant::overload !=
asio_require_concept_fn::ill_formed>
{
};
#if defined(ASIO_HAS_VARIABLE_TEMPLATES)
template
constexpr bool can_require_concept_v = can_require_concept::value;
#endif // defined(ASIO_HAS_VARIABLE_TEMPLATES)
template
struct is_nothrow_require_concept :
integral_constant::is_noexcept>
{
};
#if defined(ASIO_HAS_VARIABLE_TEMPLATES)
template
constexpr bool is_nothrow_require_concept_v
= is_nothrow_require_concept::value;
#endif // defined(ASIO_HAS_VARIABLE_TEMPLATES)
template
struct require_concept_result
{
typedef typename asio_require_concept_fn::call_traits<
require_concept_t, T, void(Property)>::result_type type;
};
template
using require_concept_result_t =
typename require_concept_result::type;
} // namespace asio
#endif // defined(GENERATING_DOCUMENTATION)
#include "asio/detail/pop_options.hpp"
#endif // ASIO_REQUIRE_CONCEPT_HPP