epoc32/include/stdapis/boost/mpl/aux_/na_spec.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
williamr@2
     2
#ifndef BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED
williamr@2
     3
#define BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED
williamr@2
     4
williamr@2
     5
// Copyright Aleksey Gurtovoy 2001-2004
williamr@2
     6
//
williamr@2
     7
// Distributed under the Boost Software License, Version 1.0. 
williamr@2
     8
// (See accompanying file LICENSE_1_0.txt or copy at 
williamr@2
     9
// http://www.boost.org/LICENSE_1_0.txt)
williamr@2
    10
//
williamr@2
    11
// See http://www.boost.org/libs/mpl for documentation.
williamr@2
    12
williamr@2
    13
// $Source: /cvsroot/boost/boost/boost/mpl/aux_/na_spec.hpp,v $
williamr@2
    14
// $Date: 2004/11/28 01:38:15 $
williamr@2
    15
// $Revision: 1.3 $
williamr@2
    16
williamr@2
    17
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
williamr@2
    18
#   include <boost/mpl/lambda_fwd.hpp>
williamr@2
    19
#   include <boost/mpl/int.hpp>
williamr@2
    20
#   include <boost/mpl/bool.hpp>
williamr@2
    21
#   include <boost/mpl/aux_/na.hpp>
williamr@2
    22
#   include <boost/mpl/aux_/arity.hpp>
williamr@2
    23
#   include <boost/mpl/aux_/template_arity_fwd.hpp>
williamr@2
    24
#endif
williamr@2
    25
williamr@2
    26
#include <boost/mpl/aux_/preprocessor/params.hpp>
williamr@2
    27
#include <boost/mpl/aux_/preprocessor/enum.hpp>
williamr@2
    28
#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
williamr@2
    29
#include <boost/mpl/aux_/lambda_arity_param.hpp>
williamr@2
    30
#include <boost/mpl/aux_/config/dtp.hpp>
williamr@2
    31
#include <boost/mpl/aux_/config/eti.hpp>
williamr@2
    32
#include <boost/mpl/aux_/nttp_decl.hpp>
williamr@2
    33
#include <boost/mpl/aux_/config/ttp.hpp>
williamr@2
    34
#include <boost/mpl/aux_/config/lambda.hpp>
williamr@2
    35
#include <boost/mpl/aux_/config/overload_resolution.hpp>
williamr@2
    36
williamr@2
    37
williamr@2
    38
#define BOOST_MPL_AUX_NA_PARAMS(i) \
williamr@2
    39
    BOOST_MPL_PP_ENUM(i, na) \
williamr@2
    40
/**/
williamr@2
    41
williamr@2
    42
#if defined(BOOST_MPL_CFG_BROKEN_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
williamr@2
    43
#   define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
williamr@2
    44
namespace aux { \
williamr@2
    45
template< BOOST_MPL_AUX_NTTP_DECL(int, N) > \
williamr@2
    46
struct arity< \
williamr@2
    47
          name< BOOST_MPL_AUX_NA_PARAMS(i) > \
williamr@2
    48
        , N \
williamr@2
    49
        > \
williamr@2
    50
    : int_< BOOST_MPL_LIMIT_METAFUNCTION_ARITY > \
williamr@2
    51
{ \
williamr@2
    52
}; \
williamr@2
    53
} \
williamr@2
    54
/**/
williamr@2
    55
#else
williamr@2
    56
#   define BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) /**/
williamr@2
    57
#endif
williamr@2
    58
williamr@2
    59
#define BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
williamr@2
    60
template<> \
williamr@2
    61
struct name< BOOST_MPL_AUX_NA_PARAMS(i) > \
williamr@2
    62
{ \
williamr@2
    63
    template< \
williamr@2
    64
          BOOST_MPL_PP_PARAMS(i, typename T) \
williamr@2
    65
        BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(i, typename T, na) \
williamr@2
    66
        > \
williamr@2
    67
    struct apply \
williamr@2
    68
        : name< BOOST_MPL_PP_PARAMS(i, T) > \
williamr@2
    69
    { \
williamr@2
    70
    }; \
williamr@2
    71
}; \
williamr@2
    72
/**/
williamr@2
    73
williamr@2
    74
#if defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
williamr@2
    75
#   define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
williamr@2
    76
template<> \
williamr@2
    77
struct lambda< \
williamr@2
    78
      name< BOOST_MPL_AUX_NA_PARAMS(i) > \
williamr@2
    79
    , void_ \
williamr@2
    80
    , true_ \
williamr@2
    81
    > \
williamr@2
    82
{ \
williamr@2
    83
    typedef false_ is_le; \
williamr@2
    84
    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
williamr@2
    85
}; \
williamr@2
    86
template<> \
williamr@2
    87
struct lambda< \
williamr@2
    88
      name< BOOST_MPL_AUX_NA_PARAMS(i) > \
williamr@2
    89
    , void_ \
williamr@2
    90
    , false_ \
williamr@2
    91
    > \
williamr@2
    92
{ \
williamr@2
    93
    typedef false_ is_le; \
williamr@2
    94
    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
williamr@2
    95
}; \
williamr@2
    96
/**/
williamr@2
    97
#else
williamr@2
    98
#   define BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
williamr@2
    99
template< typename Tag > \
williamr@2
   100
struct lambda< \
williamr@2
   101
      name< BOOST_MPL_AUX_NA_PARAMS(i) > \
williamr@2
   102
    , Tag \
williamr@2
   103
    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<-1>) \
williamr@2
   104
    > \
williamr@2
   105
{ \
williamr@2
   106
    typedef false_ is_le; \
williamr@2
   107
    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > result_; \
williamr@2
   108
    typedef name< BOOST_MPL_AUX_NA_PARAMS(i) > type; \
williamr@2
   109
}; \
williamr@2
   110
/**/
williamr@2
   111
#endif
williamr@2
   112
williamr@2
   113
#if defined(BOOST_MPL_CFG_EXTENDED_TEMPLATE_PARAMETERS_MATCHING) \
williamr@2
   114
    || defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) \
williamr@2
   115
        && defined(BOOST_MPL_CFG_BROKEN_OVERLOAD_RESOLUTION)
williamr@2
   116
#   define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \
williamr@2
   117
namespace aux { \
williamr@2
   118
template< BOOST_MPL_PP_PARAMS(j, typename T) > \
williamr@2
   119
struct template_arity< \
williamr@2
   120
          name< BOOST_MPL_PP_PARAMS(j, T) > \
williamr@2
   121
        > \
williamr@2
   122
    : int_<j> \
williamr@2
   123
{ \
williamr@2
   124
}; \
williamr@2
   125
\
williamr@2
   126
template<> \
williamr@2
   127
struct template_arity< \
williamr@2
   128
          name< BOOST_MPL_PP_ENUM(i, na) > \
williamr@2
   129
        > \
williamr@2
   130
    : int_<-1> \
williamr@2
   131
{ \
williamr@2
   132
}; \
williamr@2
   133
} \
williamr@2
   134
/**/
williamr@2
   135
#else
williamr@2
   136
#   define BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) /**/
williamr@2
   137
#endif
williamr@2
   138
williamr@2
   139
#if defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
williamr@2
   140
#   define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
williamr@2
   141
template<> \
williamr@2
   142
struct name< BOOST_MPL_PP_ENUM(i, int) > \
williamr@2
   143
{ \
williamr@2
   144
    typedef int type; \
williamr@2
   145
    enum { value = 0 }; \
williamr@2
   146
}; \
williamr@2
   147
/**/
williamr@2
   148
#else
williamr@2
   149
#   define BOOST_MPL_AUX_NA_SPEC_ETI(i, name) /**/
williamr@2
   150
#endif
williamr@2
   151
williamr@2
   152
#define BOOST_MPL_AUX_NA_PARAM(param) param = na
williamr@2
   153
williamr@2
   154
#define BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
williamr@2
   155
BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
williamr@2
   156
BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
williamr@2
   157
BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
williamr@2
   158
BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, i, name) \
williamr@2
   159
/**/
williamr@2
   160
williamr@2
   161
#define BOOST_MPL_AUX_NA_SPEC(i, name) \
williamr@2
   162
BOOST_MPL_AUX_NA_SPEC_NO_ETI(i, name) \
williamr@2
   163
BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
williamr@2
   164
/**/
williamr@2
   165
williamr@2
   166
#define BOOST_MPL_AUX_NA_SPEC2(i, j, name) \
williamr@2
   167
BOOST_MPL_AUX_NA_SPEC_MAIN(i, name) \
williamr@2
   168
BOOST_MPL_AUX_NA_SPEC_ETI(i, name) \
williamr@2
   169
BOOST_MPL_AUX_NA_SPEC_LAMBDA(i, name) \
williamr@2
   170
BOOST_MPL_AUX_NA_SPEC_ARITY(i, name) \
williamr@2
   171
BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(i, j, name) \
williamr@2
   172
/**/
williamr@2
   173
williamr@2
   174
williamr@2
   175
#endif // BOOST_MPL_AUX_NA_SPEC_HPP_INCLUDED