fork of https://github.com/oxigraph/rocksdb and https://github.com/facebook/rocksdb for nextgraph and oxigraph
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.4 KiB
40 lines
1.4 KiB
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
// This source code is licensed under both the GPLv2 (found in the
|
|
// COPYING file in the root directory) and Apache 2.0 License
|
|
// (found in the LICENSE.Apache file in the root directory).
|
|
|
|
#pragma once
|
|
|
|
#include <folly/Traits.h>
|
|
|
|
#include <functional>
|
|
#include <type_traits>
|
|
|
|
namespace folly {
|
|
namespace invoke_detail {
|
|
template <typename F, typename... Args>
|
|
using invoke_result_ = decltype(std::declval<F>()(std::declval<Args>()...));
|
|
|
|
template <typename Void, typename F, typename... Args>
|
|
struct is_invocable : std::false_type {};
|
|
|
|
template <typename F, typename... Args>
|
|
struct is_invocable<void_t<invoke_result_<F, Args...>>, F, Args...>
|
|
: std::true_type {};
|
|
|
|
template <typename Void, typename R, typename F, typename... Args>
|
|
struct is_invocable_r : std::false_type {};
|
|
|
|
template <typename R, typename F, typename... Args>
|
|
struct is_invocable_r<void_t<invoke_result_<F, Args...>>, R, F, Args...>
|
|
: std::is_convertible<invoke_result_<F, Args...>, R> {};
|
|
} // namespace invoke_detail
|
|
|
|
// mimic: std::is_invocable, C++17
|
|
template <typename F, typename... Args>
|
|
struct is_invocable : invoke_detail::is_invocable<void, F, Args...> {};
|
|
|
|
// mimic: std::is_invocable_r, C++17
|
|
template <typename R, typename F, typename... Args>
|
|
struct is_invocable_r : invoke_detail::is_invocable_r<void, R, F, Args...> {};
|
|
} // namespace folly
|
|
|