// Copyright (c) 2018-2019 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) #include #include template void check_traits( F ) { using namespace boost::leaf::leaf_detail; using boost::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; } ); return 0; }