libcarla/include/system/boost/hof/function_param_limit.hpp
2024-10-18 13:19:59 +08:00

58 lines
1.6 KiB
C++

/*=============================================================================
Copyright (c) 2016 Paul Fultz II
function_param_limit.hpp
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_HOF_GUARD_FUNCTION_PARAM_LIMIT_HPP
#define BOOST_HOF_GUARD_FUNCTION_PARAM_LIMIT_HPP
/// function_param_limit
/// ====================
///
/// Description
/// -----------
///
/// The `function_param_limit` metafunction retrieves the maximum number of
/// parameters for a function. For function pointers it returns the number of
/// parameters. Everything else, it returns `SIZE_MAX`, but this can be
/// changed by annotating the function with the [`limit`](limit) decorator.
///
/// This is a type trait that inherits from `std::integral_constant`.
///
/// Synopsis
/// --------
///
/// template<class F>
/// struct function_param_limit
/// : std::integral_constant<std::size_t, ...>
/// {};
///
/// See Also
/// --------
///
/// * [Partial function evaluation](<Partial function evaluation>)
/// * [limit](limit)
///
#include <boost/hof/detail/holder.hpp>
#include <type_traits>
#include <cstdint>
namespace boost { namespace hof {
template<class F, class=void>
struct function_param_limit
: std::integral_constant<std::size_t, SIZE_MAX>
{};
template<class F>
struct function_param_limit<F, typename detail::holder<typename F::fit_function_param_limit>::type>
: F::fit_function_param_limit
{};
}} // namespace boost::hof
#endif