}
template<typename... Args>
- std::result_of_t<T&(Args&&...)> operator ()(Args&&... args ) const {
+ auto operator()(Args&&... args) const {
return (*p)(std::forward<Args>(args)...);
}
template<typename... Args>
- std::result_of_t<T&&(Args&&...)> operator ()(Args&&... args ) {
+ auto operator()(Args&&... args) {
return std::move(*p)(std::forward<Args>(args)...);
}
template<typename T, typename Callback, typename...Args>
auto with_val(const ConfigValues& values, const std::string_view key,
Callback&& cb, Args&&... args) const ->
- std::result_of_t<Callback(const T&, Args...)> {
+ std::invoke_result_t<Callback, const T&, Args...> {
return std::forward<Callback>(cb)(
std::get<T>(this->get_val_generic(values, key)),
std::forward<Args>(args)...);
//
template<typename T, typename F>
auto maybe_do(const boost::optional<T>& t, F&& f) ->
- boost::optional<std::result_of_t<F(const std::decay_t<T>)>>
+ boost::optional<std::invoke_result_t<F, const std::decay_t<T>>>
{
if (t)
return { std::forward<F>(f)(*t) };
//
template<typename T, typename F, typename U>
auto maybe_do_or(const boost::optional<T>& t, F&& f, U&& u) ->
- std::result_of_t<F(const std::decay_t<T>)>
+ std::invoke_result_t<F, const std::decay_t<T>>
{
- static_assert(std::is_convertible_v<U, std::result_of_t<F(T)>>,
+ static_assert(std::is_convertible_v<U, std::invoke_result_t<F, T>>,
"Alternate value must be convertible to function return type.");
if (t)
return std::forward<F>(f)(*t);
template<typename T, typename F>
auto maybe_do(const std::optional<T>& t, F&& f) ->
- std::optional<std::result_of_t<F(const std::decay_t<T>)>>
+ std::optional<std::invoke_result_t<F, const std::decay_t<T>>>
{
if (t)
return { std::forward<F>(f)(*t) };
//
template<typename T, typename F, typename U>
auto maybe_do_or(const std::optional<T>& t, F&& f, U&& u) ->
- std::result_of_t<F(const std::decay_t<T>)>
+ std::invoke_result_t<F, const std::decay_t<T>>
{
- static_assert(std::is_convertible_v<U, std::result_of_t<F(T)>>,
+ static_assert(std::is_convertible_v<U, std::invoke_result_t<F, T>>,
"Alternate value must be convertible to function return type.");
if (t)
return std::forward<F>(f)(*t);
_convenience::for_each_helper(t, f, std::index_sequence_for<Ts...>{});
}
}
+
#endif // CEPH_COMMON_CONVENIENCE_H
};
template<class Rep, class Period, typename Func, typename... Args,
- typename Return = std::result_of_t<Func&&(Args&&...)>>
+ typename Return = std::invoke_result_t<Func, Args...>>
Return wait_until(const std::chrono::duration<Rep, Period>& rel_time,
const std::chrono::duration<Rep, Period>& step,
const Return& expected,