// Copyright 2018-2022 Emil Dotchevski and Reverge Studios, Inc. // 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) #ifdef BOOST_LEAF_TEST_SINGLE_HEADER # include "leaf.hpp" #else # include #endif #include namespace leaf = boost::leaf; template void check_traits( F ) { using namespace leaf::leaf_detail; using leaf::leaf_detail_mp11::mp_list; static_assert(function_traits::arity==4,"arity"); static_assert(std::is_same,double>::value,"return_type"); static_assert(std::is_same,int>::value,"arg<0>"); static_assert(std::is_same,float>::value,"arg<1>"); static_assert(std::is_same,int const &>::value,"arg<2>"); static_assert(std::is_same,float &&>::value,"arg<3>"); static_assert(std::is_same,mp_list>::value,"mp_args"); } double f1( int, float, int const &, float && ) { return 42; } int main() { check_traits(&f1); check_traits(std::function(f1)); check_traits( []( int const volatile, float const, int const &, float && ) -> double { return 42; } ); check_traits( []( int const volatile, float const, int const &, float && ) noexcept -> double { return 42; } ); static_assert(leaf::leaf_detail::function_traits::arity==-1, "int arity"); return 0; }