Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2006-10-31 08:34:21


Eric Niebler wrote:

> Another work-around is to add the following:
>
> #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400))
> namespace boost
> {
> template<typename T>
> struct result_of;
>
> template<typename T, typename A>
> struct result_of<Foo<T>(A)>
> : Foo<T>::template result<void(A)>
> {};
> }
> #endif

It's also possible to provide the actual return type in the result_of
specialization (which is what I use when I need to talk to result_of). No
workarounds are needed in this case.

    template<class T, class A> struct result_of<Foo<T>(A)>
    {
        typedef ... type;
    };

The problem is that to stay cv-correct you need four specializations. Two if
you ignore volatile function objects.

    template<class T, class A> struct result_of<Foo<T> const ( A )>
    {
        typedef ... type;
    };


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk