Terry Golubiewski schrieb:
How? I read the docs you referenced (previously), but I did not see a concrete example.
i thought it was straightforward, but looking into details it was not the right reference. =-O However, below is a solution which relies on BOOST_TYPEOF. BOOST_TYPEOF will have a problem if the return_type is void. So i replace it with mpl::void_.
typedef typename boost::result_of< ...what goes here???... (double)>::type f_double_return_type;
terry
HTH Kim # include <boost/mpl/assert.hpp> # include <boost/typeof/typeof.hpp> # include <boost/type_traits/is_same.hpp> # include <boost/mpl/if.hpp> # include <boost/mpl/void.hpp> struct X { int f(int) { return 1; } double f(double) { return 1.0; } void f(char) {} }; template<typename Param, typename return_type> typename boost::mpl::if_< boost::is_same<return_type,void> , boost::mpl::void_ , return_type
::type deduce_type(return_type (X::*)(Param));
typedef BOOST_TYPEOF(deduce_type<char>(&X::f)) void_; typedef BOOST_TYPEOF(deduce_type<int>(&X::f)) int_; typedef BOOST_TYPEOF(deduce_type<double>(&X::f)) double_; int main() { BOOST_MPL_ASSERT((boost::is_same<void_,boost::mpl::void_>)); BOOST_MPL_ASSERT((boost::is_same<int_,int>)); BOOST_MPL_ASSERT((boost::is_same<double_,double>)); return 0; }