diff --git a/utility.htm b/utility.htm index 09a8632..73bd692 100644 --- a/utility.htm +++ b/utility.htm @@ -230,51 +230,6 @@ typedef boost::result_of< >::type type; // type is int -

The result template must be specialized for every valid calling signature of the function object. - If the operator() accepts arguments by (possibly const) reference and/or is const - qualified, the result specialization must take this into account. Type traits - and more generic specializations may help to reduce the number of result specializations. This way result_of users - will be able to specify argument types exactly according to the function object call expression. For example:

- -
-
struct functor {
-    template<class> struct result;
-
-    // Use template parameter F to match the function object. This will allow result deduction for both const and non-const functor.
-    template<class F, class T>
-    struct result<F(T)> {
-        // When argument type is matched like above, remember that the type may be a (const-qualified) reference.
-        // Use type traits to transform the argument type.
-        typedef typename remove_cv<typename remove_reference<T>::type>::type argument_type;
-        typedef argument_type type;
-    };
-
-    // The operator can be called on both const and non-const functor. The argument can be lvalue or rvalue.
-    template<class T>
-    T operator()(T const& x) const
-    {
-        return x;
-    }
-};
-
-// All following result_of uses are valid and result in int
-typedef boost::result_of< functor(int) >::type type1; // the argument is rvalue
-functor f;
-type1 r1 = f(10);
-
-typedef boost::result_of< const functor(int) >::type type2; // the function object is const
-const functor cf;
-type2 r2 = cf(10);
-
-typedef boost::result_of< functor(int&) >::type type3; // the argument is lvalue
-int a = 10;
-type3 r3 = f(a);
-
-typedef boost::result_of< functor(int const&) >::type type4; // the argument is const lvalue
-const int ca = 10;
-type4 r4 = f(ca);
-
-

Since decltype is a new language feature recently standardized in C++11, if you are writing a function object