This is supposed to work, and did with 4.4: #include <functional> struct X { int foo(); }; typedef int (X::*pm)(); std::result_of<pm()>::type i = 0; This means we don't accept std::async(X::foo, ...) which is defined in terms of result_of I think I intentionally removed support for pointers to members from result_of, because an earlier C++0x draft said it shouldn't work
(In reply to comment #0) > This means we don't accept std::async(X::foo, ...) Oops, meant to say std::async(&X::foo, ...)
I have a fix for this now, as well as a few issues in <functional> such as LWG 2017, 2021, missing deleted ref/cref overloads etc.
Excellent!
I'm just trying to figure out whether to enumerate every type of member function w.r.t cv-qualifiers and ref-qualifiers and varargs as I think that's 8 partial specializations (24 when we get support for ref-qualifiers on member functions!) some of which are missing for mem_fn/_Mem_fn (see my mails to the reflector)
(In reply to comment #0) > This is supposed to work, and did with 4.4: > > #include <functional> > struct X > { > int foo(); > }; > > typedef int (X::*pm)(); > std::result_of<pm()>::type i = 0; Bah, that shouldn't work! But this should: std::result_of<pm(X)>::type i = 0;
Author: redi Date: Tue Apr 19 13:26:08 2011 New Revision: 172709 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=172709 Log: 2011-04-19 Jonathan Wakely <jwakely.gcc@gmail.com> PR libstdc++/48521 * include/std/type_traits (result_of): Handle pointer to member. * include/std/functional (__invoke): Likewise. (_Function_to_function_pointer): Remove. (_Reference_wrapper_base): Provide nested types independent of unary_function and binary_function. (reference_wrapper::operator()): DR 2017. (ref(const A&&), cref(const A&&): Define as deleted. * include/std/future (async): Simplify SFINAE and use result_of to support pointer to member. * testsuite/20_util/reference_wrapper/invoke.cc: Test pointer to member. * testsuite/20_util/reference_wrapper/24803.cc: Likewise. * testsuite/20_util/reference_wrapper/typedefs.cc: Test for types instead of derivation from unary_function and binary_function. * testsuite/20_util/declval/requirements/1_neg.cc: Adjust. * testsuite/20_util/reference_wrapper/invoke-2.cc: New. * testsuite/20_util/reference_wrapper/ref_neg.c: New. * testsuite/20_util/reference_wrapper/typedefs-3.c: New. Added: trunk/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc trunk/libstdc++-v3/testsuite/20_util/reference_wrapper/ref_neg.cc trunk/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/include/std/functional trunk/libstdc++-v3/include/std/future trunk/libstdc++-v3/include/std/type_traits trunk/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc trunk/libstdc++-v3/testsuite/20_util/reference_wrapper/24803.cc trunk/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke.cc trunk/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs.cc
Fixed on trunk so far
Author: redi Date: Sat Apr 23 17:51:31 2011 New Revision: 172901 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=172901 Log: 2011-04-23 Jonathan Wakely <jwakely.gcc@gmail.com> PR libstdc++/48521 * include/std/type_traits (result_of): Handle pointer to member. * include/std/functional (__invoke): Likewise. (_Function_to_function_pointer): Remove. (_Reference_wrapper_base): Provide nested types independent of unary_function and binary_function. (reference_wrapper::operator()): DR 2017. (ref(const A&&), cref(const A&&): Define as deleted. * include/std/future (async): Simplify SFINAE and use result_of to support pointer to member. * testsuite/20_util/reference_wrapper/invoke.cc: Test pointer to member. * testsuite/20_util/reference_wrapper/24803.cc: Likewise. * testsuite/20_util/reference_wrapper/typedefs.cc: Test for types instead of derivation from unary_function and binary_function. * testsuite/20_util/reference_wrapper/invoke-2.cc: New. * testsuite/20_util/reference_wrapper/ref_neg.c: New. * testsuite/20_util/reference_wrapper/typedefs-3.c: New. Added: branches/gcc-4_6-branch/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc branches/gcc-4_6-branch/libstdc++-v3/testsuite/20_util/reference_wrapper/ref_neg.cc branches/gcc-4_6-branch/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs-3.cc Modified: branches/gcc-4_6-branch/libstdc++-v3/ChangeLog branches/gcc-4_6-branch/libstdc++-v3/include/std/functional branches/gcc-4_6-branch/libstdc++-v3/include/std/future branches/gcc-4_6-branch/libstdc++-v3/include/std/type_traits branches/gcc-4_6-branch/libstdc++-v3/testsuite/20_util/reference_wrapper/24803.cc branches/gcc-4_6-branch/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke.cc branches/gcc-4_6-branch/libstdc++-v3/testsuite/20_util/reference_wrapper/typedefs.cc
fixed for 4.6.1 I don't plan to fix this on the 4.5 branch