#pragma once
#include <folly/Traits.h>
namespace folly {
namespace detail {
template <typename>
struct function_traits_base_;
function_traits_base_<R (A...)>;
template <bool Nx>
struct function_traits_nx_ { … };
template <bool Var>
struct function_traits_var_ { … };
template <typename T>
struct function_traits_cvref_ { … };
}
template <typename>
struct function_traits;
function_traits<R (A...)>;
function_traits<R (A...) const>;
function_traits<R (A...) volatile>;
function_traits<R (A...) const volatile>;
function_traits<R (A...) &>;
function_traits<R (A...) const &>;
function_traits<R (A...) volatile &>;
function_traits<R (A...) const volatile &>;
function_traits<R (A...) &&>;
function_traits<R (A...) const &&>;
function_traits<R (A...) volatile &&>;
function_traits<R (A...) const volatile &&>;
function_traits<R (A..., ...)>;
function_traits<R (A..., ...) const>;
function_traits<R (A..., ...) volatile>;
function_traits<R (A..., ...) const volatile>;
function_traits<R (A..., ...) &>;
function_traits<R (A..., ...) const &>;
function_traits<R (A..., ...) volatile &>;
function_traits<R (A..., ...) const volatile &>;
function_traits<R (A..., ...) &&>;
function_traits<R (A..., ...) const &&>;
function_traits<R (A..., ...) volatile &&>;
function_traits<R (A..., ...) const volatile &&>;
function_traits<R (A...) noexcept>;
function_traits<R (A...) const noexcept>;
function_traits<R (A...) volatile noexcept>;
function_traits<R (A...) const volatile noexcept>;
function_traits<R (A...) & noexcept>;
function_traits<R (A...) const & noexcept>;
function_traits<R (A...) volatile & noexcept>;
function_traits<R (A...) const volatile & noexcept>;
function_traits<R (A...) && noexcept>;
function_traits<R (A...) const && noexcept>;
function_traits<R (A...) volatile && noexcept>;
function_traits<R (A...) const volatile && noexcept>;
function_traits<R (A..., ...) noexcept>;
function_traits<R (A..., ...) const noexcept>;
function_traits<R (A..., ...) volatile noexcept>;
function_traits<R (A..., ...) const volatile noexcept>;
function_traits<R (A..., ...) & noexcept>;
function_traits<R (A..., ...) const & noexcept>;
function_traits<R (A..., ...) volatile & noexcept>;
function_traits<R (A..., ...) const volatile & noexcept>;
function_traits<R (A..., ...) && noexcept>;
function_traits<R (A..., ...) const && noexcept>;
function_traits<R (A..., ...) volatile && noexcept>;
function_traits<R (A..., ...) const volatile && noexcept>;
namespace detail {
template <bool Nx, bool Var, typename R>
struct function_remove_cvref_;
function_remove_cvref_<false, false, R>;
function_remove_cvref_<false, true, R>;
function_remove_cvref_<true, false, R>;
function_remove_cvref_<true, true, R>;
function_remove_cvref_t_;
}
function_remove_cvref_t;
template <typename F>
struct function_remove_cvref { … };
namespace detail {
template <typename Src, bool Var>
struct function_like_src_;
function_like_src_<Src, 0>;
function_like_src_<const Src, 0>;
function_like_src_<volatile Src, 0>;
function_like_src_<const volatile Src, 0>;
function_like_src_<Src &, 0>;
function_like_src_<const Src &, 0>;
function_like_src_<volatile Src &, 0>;
function_like_src_<const volatile Src &, 0>;
function_like_src_<Src &&, 0>;
function_like_src_<const Src &&, 0>;
function_like_src_<volatile Src &&, 0>;
function_like_src_<const volatile Src &&, 0>;
function_like_src_<Src, 1>;
function_like_src_<const Src, 1>;
function_like_src_<volatile Src, 1>;
function_like_src_<const volatile Src, 1>;
function_like_src_<Src &, 1>;
function_like_src_<const Src &, 1>;
function_like_src_<volatile Src &, 1>;
function_like_src_<const volatile Src &, 1>;
function_like_src_<Src &&, 1>;
function_like_src_<const Src &&, 1>;
function_like_src_<volatile Src &&, 1>;
function_like_src_<const volatile Src &&, 1>;
template <typename Dst>
struct function_like_dst_ : function_like_dst_<function_remove_cvref_t<Dst>> { … };
function_like_dst_<R (A...)>;
function_like_dst_<R (A..., ...)>;
function_like_dst_<R (A...) noexcept>;
function_like_dst_<R (A..., ...) noexcept>;
}
function_like_value_t;
template <typename Src, typename Dst>
struct function_like_value { … };
}