//Copyright (c) 2018 Emil Dotchevski //Copyright (c) 2018 Second Spectrum, 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; static_assert(function_traits::arity==4,"arity"); static_assert(std::is_same::ret,double>::value,"ret"); static_assert(std::is_same::template arg<0>::type,int>::value,"arg<0>"); static_assert(std::is_same::template arg<0>::type_,int>::value,"arg<0>"); static_assert(std::is_same::template arg<1>::type,float>::value,"arg<1>"); static_assert(std::is_same::template arg<1>::type_,float>::value,"arg<1>"); static_assert(std::is_same::template arg<2>::type,int const &>::value,"arg<2>"); static_assert(std::is_same::template arg<2>::type_,int>::value,"arg<2>"); static_assert(std::is_same::template arg<3>::type,float &&>::value,"arg<3>"); static_assert(std::is_same::template arg<3>::type_,float>::value,"arg<3>"); static_assert(std::is_same::mp_args,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; }