epoc32/include/stdapis/boost/utility/detail/result_of_iterate.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
williamr@2
     1
// Boost result_of library
williamr@2
     2
williamr@2
     3
//  Copyright Douglas Gregor 2004. Use, modification and
williamr@2
     4
//  distribution is subject to the Boost Software License, Version
williamr@2
     5
//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
williamr@2
     6
//  http://www.boost.org/LICENSE_1_0.txt)
williamr@2
     7
williamr@2
     8
// For more information, see http://www.boost.org/libs/utility
williamr@2
     9
#if !defined(BOOST_PP_IS_ITERATING)
williamr@2
    10
# error Boost result_of - do not include this file!
williamr@2
    11
#endif
williamr@2
    12
williamr@2
    13
// CWPro8 requires an argument in a function type specialization
williamr@2
    14
#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3002)) && BOOST_PP_ITERATION() == 0
williamr@2
    15
# define BOOST_RESULT_OF_ARGS void
williamr@2
    16
#else
williamr@2
    17
# define BOOST_RESULT_OF_ARGS BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),T)
williamr@2
    18
#endif
williamr@2
    19
williamr@2
    20
#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
williamr@2
    21
template<typename F BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
williamr@2
    22
         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
williamr@2
    23
struct result_of<F(BOOST_RESULT_OF_ARGS)>
williamr@2
    24
    : detail::result_of<F, F(BOOST_RESULT_OF_ARGS)> {};
williamr@2
    25
#endif
williamr@2
    26
williamr@2
    27
namespace detail {
williamr@2
    28
williamr@2
    29
template<typename R,  typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
williamr@2
    30
         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
williamr@2
    31
struct result_of<R (*)(BOOST_RESULT_OF_ARGS), FArgs>
williamr@2
    32
{
williamr@2
    33
  typedef R type;
williamr@2
    34
};
williamr@2
    35
williamr@2
    36
template<typename R,  typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
williamr@2
    37
         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
williamr@2
    38
struct result_of<R (&)(BOOST_RESULT_OF_ARGS), FArgs>
williamr@2
    39
{
williamr@2
    40
  typedef R type;
williamr@2
    41
};
williamr@2
    42
williamr@2
    43
#undef BOOST_RESULT_OF_ARGS
williamr@2
    44
williamr@2
    45
#if BOOST_PP_ITERATION() > 1 && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x551))
williamr@2
    46
template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
williamr@2
    47
         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
williamr@2
    48
struct result_of<R (T0::*)
williamr@2
    49
                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T)),
williamr@2
    50
                 FArgs>
williamr@2
    51
{
williamr@2
    52
  typedef R type;
williamr@2
    53
};
williamr@2
    54
williamr@2
    55
template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
williamr@2
    56
         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
williamr@2
    57
struct result_of<R (T0::*)
williamr@2
    58
                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
williamr@2
    59
                     const,
williamr@2
    60
                 FArgs>
williamr@2
    61
{
williamr@2
    62
  typedef R type;
williamr@2
    63
};
williamr@2
    64
williamr@2
    65
template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
williamr@2
    66
         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
williamr@2
    67
struct result_of<R (T0::*)
williamr@2
    68
                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
williamr@2
    69
                     volatile,
williamr@2
    70
                 FArgs>
williamr@2
    71
{
williamr@2
    72
  typedef R type;
williamr@2
    73
};
williamr@2
    74
williamr@2
    75
template<typename R, typename FArgs BOOST_PP_COMMA_IF(BOOST_PP_ITERATION())
williamr@2
    76
         BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(),typename T)>
williamr@2
    77
struct result_of<R (T0::*)
williamr@2
    78
                     (BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_PP_ITERATION(),T))
williamr@2
    79
                     const volatile,
williamr@2
    80
                 FArgs>
williamr@2
    81
{
williamr@2
    82
  typedef R type;
williamr@2
    83
};
williamr@2
    84
#endif
williamr@2
    85
williamr@2
    86
}