os/ossrv/ossrv_pub/boost_apis/boost/spirit/phoenix/new.hpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
/*=============================================================================
sl@0
     2
    Phoenix V1.2.1
sl@0
     3
    Copyright (c) 2001-2003 Joel de Guzman
sl@0
     4
    Copyright (c) 2001-2003 Hartmut Kaiser
sl@0
     5
    Copyright (c) 2003 Vaclav Vesely
sl@0
     6
sl@0
     7
    Use, modification and distribution is subject to the Boost Software
sl@0
     8
    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
sl@0
     9
    http://www.boost.org/LICENSE_1_0.txt)
sl@0
    10
==============================================================================*/
sl@0
    11
sl@0
    12
#ifndef PHOENIX_NEW_HPP
sl@0
    13
#define PHOENIX_NEW_HPP
sl@0
    14
sl@0
    15
///////////////////////////////////////////////////////////////////////////////
sl@0
    16
#include <boost/spirit/phoenix/actor.hpp>
sl@0
    17
#include <boost/spirit/phoenix/composite.hpp>
sl@0
    18
#include <boost/static_assert.hpp>
sl@0
    19
sl@0
    20
///////////////////////////////////////////////////////////////////////////////
sl@0
    21
namespace phoenix {
sl@0
    22
sl@0
    23
///////////////////////////////////////////////////////////////////////////////
sl@0
    24
//
sl@0
    25
//  Phoenix predefined maximum new_ limit. This limit defines the maximum
sl@0
    26
//  number of parameters supported for calles to the set of new_ template
sl@0
    27
//  functions (lazy object construction, see below). This number defaults to 3.
sl@0
    28
//  The actual maximum is rounded up in multiples of 3. Thus, if this value
sl@0
    29
//  is 4, the actual limit is 6. The ultimate maximum limit in this
sl@0
    30
//  implementation is 15.
sl@0
    31
//  PHOENIX_CONSTRUCT_LIMIT should NOT be greater than PHOENIX_LIMIT!
sl@0
    32
sl@0
    33
#if !defined(PHOENIX_CONSTRUCT_LIMIT)
sl@0
    34
#define PHOENIX_CONSTRUCT_LIMIT PHOENIX_LIMIT
sl@0
    35
#endif
sl@0
    36
sl@0
    37
// ensure PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT
sl@0
    38
BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= PHOENIX_LIMIT);
sl@0
    39
sl@0
    40
// ensure PHOENIX_CONSTRUCT_LIMIT <= 15
sl@0
    41
BOOST_STATIC_ASSERT(PHOENIX_CONSTRUCT_LIMIT <= 15);
sl@0
    42
sl@0
    43
///////////////////////////////////////////////////////////////////////////////
sl@0
    44
//
sl@0
    45
//  new_
sl@0
    46
//
sl@0
    47
//      Lazy object construction
sl@0
    48
//
sl@0
    49
//      The set of new_<> template classes and functions provide a way
sl@0
    50
//      of lazily constructing certain object from a arbitrary set of
sl@0
    51
//      actors during parsing.
sl@0
    52
//      The new_ templates are (syntactically) used very much like
sl@0
    53
//      the well known C++ casts:
sl@0
    54
//
sl@0
    55
//          A *a = new_<A>(...arbitrary list of actors...);
sl@0
    56
//
sl@0
    57
//      where the given parameters are submitted as parameters to the
sl@0
    58
//      contructor of the object of type A. (This certainly implies, that
sl@0
    59
//      type A has a constructor with a fitting set of parameter types
sl@0
    60
//      defined.)
sl@0
    61
//
sl@0
    62
//      The maximum number of needed parameters is controlled through the
sl@0
    63
//      preprocessor constant PHOENIX_CONSTRUCT_LIMIT. Note though, that this
sl@0
    64
//      limit should not be greater than PHOENIX_LIMIT.
sl@0
    65
//
sl@0
    66
///////////////////////////////////////////////////////////////////////////////
sl@0
    67
sl@0
    68
template <typename T>
sl@0
    69
struct new_l_0
sl@0
    70
{
sl@0
    71
    typedef T* result_type;
sl@0
    72
sl@0
    73
    T* operator()() const
sl@0
    74
    {
sl@0
    75
        return new T();
sl@0
    76
    }
sl@0
    77
};
sl@0
    78
sl@0
    79
template <typename T>
sl@0
    80
struct new_l {
sl@0
    81
sl@0
    82
    template <
sl@0
    83
            typename A
sl@0
    84
        ,   typename B
sl@0
    85
        ,   typename C
sl@0
    86
sl@0
    87
#if PHOENIX_CONSTRUCT_LIMIT > 3
sl@0
    88
        ,   typename D
sl@0
    89
        ,   typename E
sl@0
    90
        ,   typename F
sl@0
    91
sl@0
    92
#if PHOENIX_CONSTRUCT_LIMIT > 6
sl@0
    93
        ,   typename G
sl@0
    94
        ,   typename H
sl@0
    95
        ,   typename I
sl@0
    96
sl@0
    97
#if PHOENIX_CONSTRUCT_LIMIT > 9
sl@0
    98
        ,   typename J
sl@0
    99
        ,   typename K
sl@0
   100
        ,   typename L
sl@0
   101
sl@0
   102
#if PHOENIX_CONSTRUCT_LIMIT > 12
sl@0
   103
        ,   typename M
sl@0
   104
        ,   typename N
sl@0
   105
        ,   typename O
sl@0
   106
#endif
sl@0
   107
#endif
sl@0
   108
#endif
sl@0
   109
#endif
sl@0
   110
    >
sl@0
   111
    struct result { typedef T* type; };
sl@0
   112
sl@0
   113
    T* operator()() const {
sl@0
   114
        return new T();
sl@0
   115
    }
sl@0
   116
sl@0
   117
    template <typename A>
sl@0
   118
    T* operator()(A const& a) const {
sl@0
   119
        return new T(a);
sl@0
   120
    }
sl@0
   121
sl@0
   122
    template <typename A, typename B>
sl@0
   123
    T* operator()(A const& a, B const& b) const {
sl@0
   124
        return new T(a, b);
sl@0
   125
    }
sl@0
   126
sl@0
   127
    template <typename A, typename B, typename C>
sl@0
   128
    T* operator()(A const& a, B const& b, C const& c) const {
sl@0
   129
        return new T(a, b, c);
sl@0
   130
    }
sl@0
   131
sl@0
   132
#if PHOENIX_CONSTRUCT_LIMIT > 3
sl@0
   133
    template <
sl@0
   134
        typename A, typename B, typename C, typename D
sl@0
   135
    >
sl@0
   136
    T* operator()(
sl@0
   137
        A const& a, B const& b, C const& c, D const& d) const
sl@0
   138
    {
sl@0
   139
        return new T(a, b, c, d);
sl@0
   140
    }
sl@0
   141
sl@0
   142
    template <
sl@0
   143
        typename A, typename B, typename C, typename D, typename E
sl@0
   144
    >
sl@0
   145
    T* operator()(
sl@0
   146
        A const& a, B const& b, C const& c, D const& d, E const& e) const
sl@0
   147
    {
sl@0
   148
        return new T(a, b, c, d, e);
sl@0
   149
    }
sl@0
   150
sl@0
   151
    template <
sl@0
   152
        typename A, typename B, typename C, typename D, typename E,
sl@0
   153
        typename F
sl@0
   154
    >
sl@0
   155
    T* operator()(
sl@0
   156
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   157
        F const& f) const
sl@0
   158
    {
sl@0
   159
        return new T(a, b, c, d, e, f);
sl@0
   160
    }
sl@0
   161
sl@0
   162
#if PHOENIX_CONSTRUCT_LIMIT > 6
sl@0
   163
    template <
sl@0
   164
        typename A, typename B, typename C, typename D, typename E,
sl@0
   165
        typename F, typename G
sl@0
   166
    >
sl@0
   167
    T* operator()(
sl@0
   168
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   169
        F const& f, G const& g) const
sl@0
   170
    {
sl@0
   171
        return new T(a, b, c, d, e, f, g);
sl@0
   172
    }
sl@0
   173
sl@0
   174
    template <
sl@0
   175
        typename A, typename B, typename C, typename D, typename E,
sl@0
   176
        typename F, typename G, typename H
sl@0
   177
    >
sl@0
   178
    T* operator()(
sl@0
   179
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   180
        F const& f, G const& g, H const& h) const
sl@0
   181
    {
sl@0
   182
        return new T(a, b, c, d, e, f, g, h);
sl@0
   183
    }
sl@0
   184
sl@0
   185
    template <
sl@0
   186
        typename A, typename B, typename C, typename D, typename E,
sl@0
   187
        typename F, typename G, typename H, typename I
sl@0
   188
    >
sl@0
   189
    T* operator()(
sl@0
   190
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   191
        F const& f, G const& g, H const& h, I const& i) const
sl@0
   192
    {
sl@0
   193
        return new T(a, b, c, d, e, f, g, h, i);
sl@0
   194
    }
sl@0
   195
sl@0
   196
#if PHOENIX_CONSTRUCT_LIMIT > 9
sl@0
   197
    template <
sl@0
   198
        typename A, typename B, typename C, typename D, typename E,
sl@0
   199
        typename F, typename G, typename H, typename I, typename J
sl@0
   200
    >
sl@0
   201
    T* operator()(
sl@0
   202
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   203
        F const& f, G const& g, H const& h, I const& i, J const& j) const
sl@0
   204
    {
sl@0
   205
        return new T(a, b, c, d, e, f, g, h, i, j);
sl@0
   206
    }
sl@0
   207
sl@0
   208
    template <
sl@0
   209
        typename A, typename B, typename C, typename D, typename E,
sl@0
   210
        typename F, typename G, typename H, typename I, typename J,
sl@0
   211
        typename K
sl@0
   212
    >
sl@0
   213
    T* operator()(
sl@0
   214
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   215
        F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
   216
        K const& k) const
sl@0
   217
    {
sl@0
   218
        return new T(a, b, c, d, e, f, g, h, i, j, k);
sl@0
   219
    }
sl@0
   220
sl@0
   221
    template <
sl@0
   222
        typename A, typename B, typename C, typename D, typename E,
sl@0
   223
        typename F, typename G, typename H, typename I, typename J,
sl@0
   224
        typename K, typename L
sl@0
   225
    >
sl@0
   226
    T* operator()(
sl@0
   227
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   228
        F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
   229
        K const& k, L const& l) const
sl@0
   230
    {
sl@0
   231
        return new T(a, b, c, d, e, f, g, h, i, j, k, l);
sl@0
   232
    }
sl@0
   233
sl@0
   234
#if PHOENIX_CONSTRUCT_LIMIT > 12
sl@0
   235
    template <
sl@0
   236
        typename A, typename B, typename C, typename D, typename E,
sl@0
   237
        typename F, typename G, typename H, typename I, typename J,
sl@0
   238
        typename K, typename L, typename M
sl@0
   239
    >
sl@0
   240
    T* operator()(
sl@0
   241
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   242
        F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
   243
        K const& k, L const& l, M const& m) const
sl@0
   244
    {
sl@0
   245
        return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
sl@0
   246
    }
sl@0
   247
sl@0
   248
    template <
sl@0
   249
        typename A, typename B, typename C, typename D, typename E,
sl@0
   250
        typename F, typename G, typename H, typename I, typename J,
sl@0
   251
        typename K, typename L, typename M, typename N
sl@0
   252
    >
sl@0
   253
    T* operator()(
sl@0
   254
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   255
        F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
   256
        K const& k, L const& l, M const& m, N const& n) const
sl@0
   257
    {
sl@0
   258
        return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
sl@0
   259
    }
sl@0
   260
sl@0
   261
    template <
sl@0
   262
        typename A, typename B, typename C, typename D, typename E,
sl@0
   263
        typename F, typename G, typename H, typename I, typename J,
sl@0
   264
        typename K, typename L, typename M, typename N, typename O
sl@0
   265
    >
sl@0
   266
    T* operator()(
sl@0
   267
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   268
        F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
   269
        K const& k, L const& l, M const& m, N const& n, O const& o) const
sl@0
   270
    {
sl@0
   271
        return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);
sl@0
   272
    }
sl@0
   273
sl@0
   274
#endif
sl@0
   275
#endif
sl@0
   276
#endif
sl@0
   277
#endif
sl@0
   278
};
sl@0
   279
sl@0
   280
template <typename T>
sl@0
   281
struct new_1 {
sl@0
   282
sl@0
   283
    template <
sl@0
   284
            typename A
sl@0
   285
    >
sl@0
   286
    struct result { typedef T* type; };
sl@0
   287
sl@0
   288
    template <typename A>
sl@0
   289
    T* operator()(A const& a) const {
sl@0
   290
        return new T(a);
sl@0
   291
    }
sl@0
   292
sl@0
   293
};
sl@0
   294
sl@0
   295
template <typename T>
sl@0
   296
struct new_2 {
sl@0
   297
sl@0
   298
    template <
sl@0
   299
            typename A
sl@0
   300
        ,   typename B
sl@0
   301
    >
sl@0
   302
    struct result { typedef T* type; };
sl@0
   303
sl@0
   304
    template <typename A, typename B>
sl@0
   305
    T* operator()(A const& a, B const& b) const {
sl@0
   306
        return new T(a, b);
sl@0
   307
    }
sl@0
   308
sl@0
   309
};
sl@0
   310
sl@0
   311
template <typename T>
sl@0
   312
struct new_3 {
sl@0
   313
sl@0
   314
    template <
sl@0
   315
            typename A
sl@0
   316
        ,   typename B
sl@0
   317
        ,   typename C
sl@0
   318
    >
sl@0
   319
    struct result { typedef T* type; };
sl@0
   320
sl@0
   321
    template <typename A, typename B, typename C>
sl@0
   322
    T* operator()(A const& a, B const& b, C const& c) const {
sl@0
   323
        return new T(a, b, c);
sl@0
   324
    }
sl@0
   325
};
sl@0
   326
sl@0
   327
#if PHOENIX_CONSTRUCT_LIMIT > 3
sl@0
   328
template <typename T>
sl@0
   329
struct new_4 {
sl@0
   330
sl@0
   331
    template <
sl@0
   332
            typename A
sl@0
   333
        ,   typename B
sl@0
   334
        ,   typename C
sl@0
   335
        ,   typename D
sl@0
   336
    >
sl@0
   337
    struct result { typedef T* type; };
sl@0
   338
sl@0
   339
sl@0
   340
    template <
sl@0
   341
        typename A, typename B, typename C, typename D
sl@0
   342
    >
sl@0
   343
    T* operator()(
sl@0
   344
        A const& a, B const& b, C const& c, D const& d) const
sl@0
   345
    {
sl@0
   346
        return new T(a, b, c, d);
sl@0
   347
    }
sl@0
   348
};
sl@0
   349
sl@0
   350
sl@0
   351
template <typename T>
sl@0
   352
struct new_5 {
sl@0
   353
sl@0
   354
    template <
sl@0
   355
            typename A
sl@0
   356
        ,   typename B
sl@0
   357
        ,   typename C
sl@0
   358
        ,   typename D
sl@0
   359
        ,   typename E
sl@0
   360
    >
sl@0
   361
    struct result { typedef T* type; };
sl@0
   362
sl@0
   363
    template <
sl@0
   364
        typename A, typename B, typename C, typename D, typename E
sl@0
   365
    >
sl@0
   366
    T* operator()(
sl@0
   367
        A const& a, B const& b, C const& c, D const& d, E const& e) const
sl@0
   368
    {
sl@0
   369
        return new T(a, b, c, d, e);
sl@0
   370
    }
sl@0
   371
};
sl@0
   372
sl@0
   373
sl@0
   374
template <typename T>
sl@0
   375
struct new_6 {
sl@0
   376
sl@0
   377
    template <
sl@0
   378
            typename A
sl@0
   379
        ,   typename B
sl@0
   380
        ,   typename C
sl@0
   381
        ,   typename D
sl@0
   382
        ,   typename E
sl@0
   383
        ,   typename F
sl@0
   384
    >
sl@0
   385
    struct result { typedef T* type; };
sl@0
   386
sl@0
   387
    template <
sl@0
   388
        typename A, typename B, typename C, typename D, typename E,
sl@0
   389
        typename F
sl@0
   390
    >
sl@0
   391
    T* operator()(
sl@0
   392
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   393
        F const& f) const
sl@0
   394
    {
sl@0
   395
        return new T(a, b, c, d, e, f);
sl@0
   396
    }
sl@0
   397
};
sl@0
   398
#endif
sl@0
   399
sl@0
   400
sl@0
   401
#if PHOENIX_CONSTRUCT_LIMIT > 6
sl@0
   402
template <typename T>
sl@0
   403
struct new_7 {
sl@0
   404
sl@0
   405
    template <
sl@0
   406
            typename A
sl@0
   407
        ,   typename B
sl@0
   408
        ,   typename C
sl@0
   409
        ,   typename D
sl@0
   410
        ,   typename E
sl@0
   411
        ,   typename F
sl@0
   412
        ,   typename G
sl@0
   413
    >
sl@0
   414
    struct result { typedef T* type; };
sl@0
   415
sl@0
   416
    template <
sl@0
   417
        typename A, typename B, typename C, typename D, typename E,
sl@0
   418
        typename F, typename G
sl@0
   419
    >
sl@0
   420
    T* operator()(
sl@0
   421
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   422
        F const& f, G const& g) const
sl@0
   423
    {
sl@0
   424
        return new T(a, b, c, d, e, f, g);
sl@0
   425
    }
sl@0
   426
};
sl@0
   427
sl@0
   428
template <typename T>
sl@0
   429
struct new_8 {
sl@0
   430
sl@0
   431
    template <
sl@0
   432
            typename A
sl@0
   433
        ,   typename B
sl@0
   434
        ,   typename C
sl@0
   435
        ,   typename D
sl@0
   436
        ,   typename E
sl@0
   437
        ,   typename F
sl@0
   438
        ,   typename G
sl@0
   439
        ,   typename H
sl@0
   440
    >
sl@0
   441
    struct result { typedef T* type; };
sl@0
   442
sl@0
   443
    template <
sl@0
   444
        typename A, typename B, typename C, typename D, typename E,
sl@0
   445
        typename F, typename G, typename H
sl@0
   446
    >
sl@0
   447
    T* operator()(
sl@0
   448
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   449
        F const& f, G const& g, H const& h) const
sl@0
   450
    {
sl@0
   451
        return new T(a, b, c, d, e, f, g, h);
sl@0
   452
    }
sl@0
   453
};
sl@0
   454
sl@0
   455
template <typename T>
sl@0
   456
struct new_9 {
sl@0
   457
sl@0
   458
    template <
sl@0
   459
            typename A
sl@0
   460
        ,   typename B
sl@0
   461
        ,   typename C
sl@0
   462
        ,   typename D
sl@0
   463
        ,   typename E
sl@0
   464
        ,   typename F
sl@0
   465
        ,   typename G
sl@0
   466
        ,   typename H
sl@0
   467
        ,   typename I
sl@0
   468
    >
sl@0
   469
    struct result { typedef T* type; };
sl@0
   470
sl@0
   471
    template <
sl@0
   472
        typename A, typename B, typename C, typename D, typename E,
sl@0
   473
        typename F, typename G, typename H, typename I
sl@0
   474
    >
sl@0
   475
    T* operator()(
sl@0
   476
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   477
        F const& f, G const& g, H const& h, I const& i) const
sl@0
   478
    {
sl@0
   479
        return new T(a, b, c, d, e, f, g, h, i);
sl@0
   480
    }
sl@0
   481
};
sl@0
   482
#endif
sl@0
   483
sl@0
   484
sl@0
   485
#if PHOENIX_CONSTRUCT_LIMIT > 9
sl@0
   486
template <typename T>
sl@0
   487
struct new_10 {
sl@0
   488
sl@0
   489
    template <
sl@0
   490
            typename A
sl@0
   491
        ,   typename B
sl@0
   492
        ,   typename C
sl@0
   493
        ,   typename D
sl@0
   494
        ,   typename E
sl@0
   495
        ,   typename F
sl@0
   496
        ,   typename G
sl@0
   497
        ,   typename H
sl@0
   498
        ,   typename I
sl@0
   499
        ,   typename J
sl@0
   500
    >
sl@0
   501
    struct result { typedef T* type; };
sl@0
   502
sl@0
   503
sl@0
   504
    template <
sl@0
   505
        typename A, typename B, typename C, typename D, typename E,
sl@0
   506
        typename F, typename G, typename H, typename I, typename J
sl@0
   507
    >
sl@0
   508
    T* operator()(
sl@0
   509
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   510
        F const& f, G const& g, H const& h, I const& i, J const& j) const
sl@0
   511
    {
sl@0
   512
        return new T(a, b, c, d, e, f, g, h, i, j);
sl@0
   513
    }
sl@0
   514
};
sl@0
   515
sl@0
   516
template <typename T>
sl@0
   517
struct new_11 {
sl@0
   518
sl@0
   519
    template <
sl@0
   520
            typename A
sl@0
   521
        ,   typename B
sl@0
   522
        ,   typename C
sl@0
   523
        ,   typename D
sl@0
   524
        ,   typename E
sl@0
   525
        ,   typename F
sl@0
   526
        ,   typename G
sl@0
   527
        ,   typename H
sl@0
   528
        ,   typename I
sl@0
   529
        ,   typename J
sl@0
   530
        ,   typename K
sl@0
   531
    >
sl@0
   532
    struct result { typedef T* type; };
sl@0
   533
sl@0
   534
sl@0
   535
    template <
sl@0
   536
        typename A, typename B, typename C, typename D, typename E,
sl@0
   537
        typename F, typename G, typename H, typename I, typename J,
sl@0
   538
        typename K
sl@0
   539
    >
sl@0
   540
    T* operator()(
sl@0
   541
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   542
        F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
   543
        K const& k) const
sl@0
   544
    {
sl@0
   545
        return new T(a, b, c, d, e, f, g, h, i, j, k);
sl@0
   546
    }
sl@0
   547
sl@0
   548
};
sl@0
   549
sl@0
   550
template <typename T>
sl@0
   551
struct new_12 {
sl@0
   552
sl@0
   553
    template <
sl@0
   554
            typename A
sl@0
   555
        ,   typename B
sl@0
   556
        ,   typename C
sl@0
   557
        ,   typename D
sl@0
   558
        ,   typename E
sl@0
   559
        ,   typename F
sl@0
   560
        ,   typename G
sl@0
   561
        ,   typename H
sl@0
   562
        ,   typename I
sl@0
   563
        ,   typename J
sl@0
   564
        ,   typename K
sl@0
   565
        ,   typename L
sl@0
   566
    >
sl@0
   567
    struct result { typedef T* type; };
sl@0
   568
sl@0
   569
sl@0
   570
    template <
sl@0
   571
        typename A, typename B, typename C, typename D, typename E,
sl@0
   572
        typename F, typename G, typename H, typename I, typename J,
sl@0
   573
        typename K, typename L
sl@0
   574
    >
sl@0
   575
    T* operator()(
sl@0
   576
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   577
        F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
   578
        K const& k, L const& l) const
sl@0
   579
    {
sl@0
   580
        return new T(a, b, c, d, f, e, g, h, i, j, k, l);
sl@0
   581
    }
sl@0
   582
};
sl@0
   583
#endif
sl@0
   584
sl@0
   585
#if PHOENIX_CONSTRUCT_LIMIT > 12
sl@0
   586
template <typename T>
sl@0
   587
struct new_13 {
sl@0
   588
sl@0
   589
    template <
sl@0
   590
            typename A
sl@0
   591
        ,   typename B
sl@0
   592
        ,   typename C
sl@0
   593
        ,   typename D
sl@0
   594
        ,   typename E
sl@0
   595
        ,   typename F
sl@0
   596
        ,   typename G
sl@0
   597
        ,   typename H
sl@0
   598
        ,   typename I
sl@0
   599
        ,   typename J
sl@0
   600
        ,   typename K
sl@0
   601
        ,   typename L
sl@0
   602
        ,   typename M
sl@0
   603
    >
sl@0
   604
    struct result { typedef T* type; };
sl@0
   605
sl@0
   606
sl@0
   607
    template <
sl@0
   608
        typename A, typename B, typename C, typename D, typename E,
sl@0
   609
        typename F, typename G, typename H, typename I, typename J,
sl@0
   610
        typename K, typename L, typename M
sl@0
   611
    >
sl@0
   612
    T* operator()(
sl@0
   613
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   614
        F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
   615
        K const& k, L const& l, M const& m) const
sl@0
   616
    {
sl@0
   617
        return new T(a, b, c, d, e, f, g, h, i, j, k, l, m);
sl@0
   618
    }
sl@0
   619
};
sl@0
   620
sl@0
   621
template <typename T>
sl@0
   622
struct new_14 {
sl@0
   623
sl@0
   624
    template <
sl@0
   625
            typename A
sl@0
   626
        ,   typename B
sl@0
   627
        ,   typename C
sl@0
   628
        ,   typename D
sl@0
   629
        ,   typename E
sl@0
   630
        ,   typename F
sl@0
   631
        ,   typename G
sl@0
   632
        ,   typename H
sl@0
   633
        ,   typename I
sl@0
   634
        ,   typename J
sl@0
   635
        ,   typename K
sl@0
   636
        ,   typename L
sl@0
   637
        ,   typename M
sl@0
   638
        ,   typename N
sl@0
   639
    >
sl@0
   640
    struct result { typedef T* type; };
sl@0
   641
sl@0
   642
sl@0
   643
    template <
sl@0
   644
        typename A, typename B, typename C, typename D, typename E,
sl@0
   645
        typename F, typename G, typename H, typename I, typename J,
sl@0
   646
        typename K, typename L, typename M, typename N
sl@0
   647
    >
sl@0
   648
    T* operator()(
sl@0
   649
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   650
        F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
   651
        K const& k, L const& l, M const& m, N const& n) const
sl@0
   652
    {
sl@0
   653
        return new T(a, b, c, d, e, f, g, h, i, j, k, l, m, n);
sl@0
   654
    }
sl@0
   655
sl@0
   656
};
sl@0
   657
sl@0
   658
template <typename T>
sl@0
   659
struct new_15 {
sl@0
   660
sl@0
   661
    template <
sl@0
   662
            typename A
sl@0
   663
        ,   typename B
sl@0
   664
        ,   typename C
sl@0
   665
        ,   typename D
sl@0
   666
        ,   typename E
sl@0
   667
        ,   typename F
sl@0
   668
        ,   typename G
sl@0
   669
        ,   typename H
sl@0
   670
        ,   typename I
sl@0
   671
        ,   typename J
sl@0
   672
        ,   typename K
sl@0
   673
        ,   typename L
sl@0
   674
        ,   typename M
sl@0
   675
        ,   typename N
sl@0
   676
        ,   typename O
sl@0
   677
    >
sl@0
   678
    struct result { typedef T* type; };
sl@0
   679
sl@0
   680
sl@0
   681
    template <
sl@0
   682
        typename A, typename B, typename C, typename D, typename E,
sl@0
   683
        typename F, typename G, typename H, typename I, typename J,
sl@0
   684
        typename K, typename L, typename M, typename N, typename O
sl@0
   685
    >
sl@0
   686
    T* operator()(
sl@0
   687
        A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   688
        F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
   689
        K const& k, L const& l, M const& m, N const& n, O const& o) const
sl@0
   690
    {
sl@0
   691
        return new T(a, b, c, d, f, e, g, h, i, j, k, l, m, n, o);
sl@0
   692
    }
sl@0
   693
sl@0
   694
};
sl@0
   695
#endif
sl@0
   696
sl@0
   697
sl@0
   698
#if defined(__BORLANDC__) || (defined(__MWERKS__) && (__MWERKS__ <= 0x3002))
sl@0
   699
sl@0
   700
///////////////////////////////////////////////////////////////////////////////
sl@0
   701
//
sl@0
   702
//  The following specializations are needed because Borland and CodeWarrior
sl@0
   703
//  does not accept default template arguments in nested template classes in
sl@0
   704
//  classes (i.e new_l::result)
sl@0
   705
//
sl@0
   706
///////////////////////////////////////////////////////////////////////////////
sl@0
   707
template <typename T, typename TupleT>
sl@0
   708
struct composite0_result<new_l_0<T>, TupleT> {
sl@0
   709
sl@0
   710
    typedef T* type;
sl@0
   711
};
sl@0
   712
sl@0
   713
//////////////////////////////////
sl@0
   714
template <typename T, typename TupleT,
sl@0
   715
    typename A>
sl@0
   716
struct composite1_result<new_l<T>, TupleT, A> {
sl@0
   717
sl@0
   718
    typedef T* type;
sl@0
   719
};
sl@0
   720
sl@0
   721
//////////////////////////////////
sl@0
   722
template <typename T, typename TupleT,
sl@0
   723
    typename A, typename B>
sl@0
   724
struct composite2_result<new_l<T>, TupleT, A, B> {
sl@0
   725
sl@0
   726
    typedef T* type;
sl@0
   727
};
sl@0
   728
sl@0
   729
//////////////////////////////////
sl@0
   730
template <typename T, typename TupleT,
sl@0
   731
    typename A, typename B, typename C>
sl@0
   732
struct composite3_result<new_l<T>, TupleT, A, B, C> {
sl@0
   733
sl@0
   734
    typedef T* type;
sl@0
   735
};
sl@0
   736
sl@0
   737
#if PHOENIX_LIMIT > 3
sl@0
   738
//////////////////////////////////
sl@0
   739
template <typename T, typename TupleT,
sl@0
   740
    typename A, typename B, typename C, typename D>
sl@0
   741
struct composite4_result<new_l<T>, TupleT,
sl@0
   742
    A, B, C, D> {
sl@0
   743
sl@0
   744
    typedef T* type;
sl@0
   745
};
sl@0
   746
sl@0
   747
//////////////////////////////////
sl@0
   748
template <typename T, typename TupleT,
sl@0
   749
    typename A, typename B, typename C, typename D, typename E>
sl@0
   750
struct composite5_result<new_l<T>, TupleT,
sl@0
   751
    A, B, C, D, E> {
sl@0
   752
sl@0
   753
    typedef T* type;
sl@0
   754
};
sl@0
   755
sl@0
   756
//////////////////////////////////
sl@0
   757
template <typename T, typename TupleT,
sl@0
   758
    typename A, typename B, typename C, typename D, typename E,
sl@0
   759
    typename F>
sl@0
   760
struct composite6_result<new_l<T>, TupleT,
sl@0
   761
    A, B, C, D, E, F> {
sl@0
   762
sl@0
   763
    typedef T* type;
sl@0
   764
};
sl@0
   765
sl@0
   766
#if PHOENIX_LIMIT > 6
sl@0
   767
//////////////////////////////////
sl@0
   768
template <typename T, typename TupleT,
sl@0
   769
    typename A, typename B, typename C, typename D, typename E,
sl@0
   770
    typename F, typename G>
sl@0
   771
struct composite7_result<new_l<T>, TupleT,
sl@0
   772
    A, B, C, D, E, F, G> {
sl@0
   773
sl@0
   774
    typedef T* type;
sl@0
   775
};
sl@0
   776
sl@0
   777
//////////////////////////////////
sl@0
   778
template <typename T, typename TupleT,
sl@0
   779
    typename A, typename B, typename C, typename D, typename E,
sl@0
   780
    typename F, typename G, typename H>
sl@0
   781
struct composite8_result<new_l<T>, TupleT,
sl@0
   782
    A, B, C, D, E, F, G, H> {
sl@0
   783
sl@0
   784
    typedef T* type;
sl@0
   785
};
sl@0
   786
sl@0
   787
//////////////////////////////////
sl@0
   788
template <typename T, typename TupleT,
sl@0
   789
    typename A, typename B, typename C, typename D, typename E,
sl@0
   790
    typename F, typename G, typename H, typename I>
sl@0
   791
struct composite9_result<new_l<T>, TupleT,
sl@0
   792
    A, B, C, D, E, F, G, H, I> {
sl@0
   793
sl@0
   794
    typedef T* type;
sl@0
   795
};
sl@0
   796
sl@0
   797
#if PHOENIX_LIMIT > 9
sl@0
   798
//////////////////////////////////
sl@0
   799
template <typename T, typename TupleT,
sl@0
   800
    typename A, typename B, typename C, typename D, typename E,
sl@0
   801
    typename F, typename G, typename H, typename I, typename J>
sl@0
   802
struct composite10_result<new_l<T>, TupleT,
sl@0
   803
    A, B, C, D, E, F, G, H, I, J> {
sl@0
   804
sl@0
   805
    typedef T* type;
sl@0
   806
};
sl@0
   807
sl@0
   808
//////////////////////////////////
sl@0
   809
template <typename T, typename TupleT,
sl@0
   810
    typename A, typename B, typename C, typename D, typename E,
sl@0
   811
    typename F, typename G, typename H, typename I, typename J,
sl@0
   812
    typename K>
sl@0
   813
struct composite11_result<new_l<T>, TupleT,
sl@0
   814
    A, B, C, D, E, F, G, H, I, J, K> {
sl@0
   815
sl@0
   816
    typedef T* type;
sl@0
   817
};
sl@0
   818
sl@0
   819
//////////////////////////////////
sl@0
   820
template <typename T, typename TupleT,
sl@0
   821
    typename A, typename B, typename C, typename D, typename E,
sl@0
   822
    typename F, typename G, typename H, typename I, typename J,
sl@0
   823
    typename K, typename L>
sl@0
   824
struct composite12_result<new_l<T>, TupleT,
sl@0
   825
    A, B, C, D, E, F, G, H, I, J, K, L> {
sl@0
   826
sl@0
   827
    typedef T* type;
sl@0
   828
};
sl@0
   829
sl@0
   830
#if PHOENIX_LIMIT > 12
sl@0
   831
//////////////////////////////////
sl@0
   832
template <typename T, typename TupleT,
sl@0
   833
    typename A, typename B, typename C, typename D, typename E,
sl@0
   834
    typename F, typename G, typename H, typename I, typename J,
sl@0
   835
    typename K, typename L, typename M>
sl@0
   836
struct composite13_result<new_l<T>, TupleT,
sl@0
   837
    A, B, C, D, E, F, G, H, I, J, K, L, M> {
sl@0
   838
sl@0
   839
    typedef T* type;
sl@0
   840
};
sl@0
   841
sl@0
   842
//////////////////////////////////
sl@0
   843
template <typename T, typename TupleT,
sl@0
   844
    typename A, typename B, typename C, typename D, typename E,
sl@0
   845
    typename F, typename G, typename H, typename I, typename J,
sl@0
   846
    typename K, typename L, typename M, typename N>
sl@0
   847
struct composite14_result<new_l<T>, TupleT,
sl@0
   848
    A, B, C, D, E, F, G, H, I, J, K, L, M, N> {
sl@0
   849
sl@0
   850
    typedef T* type;
sl@0
   851
};
sl@0
   852
sl@0
   853
//////////////////////////////////
sl@0
   854
template <typename T, typename TupleT,
sl@0
   855
    typename A, typename B, typename C, typename D, typename E,
sl@0
   856
    typename F, typename G, typename H, typename I, typename J,
sl@0
   857
    typename K, typename L, typename M, typename N, typename O>
sl@0
   858
struct composite15_result<new_l<T>, TupleT,
sl@0
   859
    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> {
sl@0
   860
sl@0
   861
    typedef T* type;
sl@0
   862
};
sl@0
   863
sl@0
   864
#endif
sl@0
   865
#endif
sl@0
   866
#endif
sl@0
   867
#endif
sl@0
   868
#endif
sl@0
   869
sl@0
   870
//////////////////////////////////
sl@0
   871
template <typename T>
sl@0
   872
inline typename impl::make_composite<new_l_0<T> >::type
sl@0
   873
new_()
sl@0
   874
{
sl@0
   875
    typedef impl::make_composite<new_l_0<T> > make_composite_t;
sl@0
   876
    typedef typename make_composite_t::type type_t;
sl@0
   877
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
   878
sl@0
   879
    return type_t(composite_type_t(new_l_0<T>()));
sl@0
   880
}
sl@0
   881
sl@0
   882
//////////////////////////////////
sl@0
   883
template <typename T, typename A>
sl@0
   884
inline typename impl::make_composite<new_1<T>, A>::type
sl@0
   885
new_(A const& a)
sl@0
   886
{
sl@0
   887
    typedef impl::make_composite<new_1<T>, A> make_composite_t;
sl@0
   888
    typedef typename make_composite_t::type type_t;
sl@0
   889
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
   890
sl@0
   891
    return type_t(composite_type_t(new_1<T>(),
sl@0
   892
        as_actor<A>::convert(a)
sl@0
   893
    ));
sl@0
   894
}
sl@0
   895
sl@0
   896
//////////////////////////////////
sl@0
   897
template <typename T, typename A, typename B>
sl@0
   898
inline typename impl::make_composite<new_2<T>, A, B>::type
sl@0
   899
new_(A const& a, B const& b)
sl@0
   900
{
sl@0
   901
    typedef impl::make_composite<new_2<T>, A, B> make_composite_t;
sl@0
   902
    typedef typename make_composite_t::type type_t;
sl@0
   903
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
   904
sl@0
   905
    return type_t(composite_type_t(new_2<T>(),
sl@0
   906
        as_actor<A>::convert(a),
sl@0
   907
        as_actor<B>::convert(b)
sl@0
   908
    ));
sl@0
   909
}
sl@0
   910
sl@0
   911
//////////////////////////////////
sl@0
   912
template <typename T, typename A, typename B, typename C>
sl@0
   913
inline typename impl::make_composite<new_3<T>, A, B, C>::type
sl@0
   914
new_(A const& a, B const& b, C const& c)
sl@0
   915
{
sl@0
   916
    typedef impl::make_composite<new_3<T>, A, B, C> make_composite_t;
sl@0
   917
    typedef typename make_composite_t::type type_t;
sl@0
   918
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
   919
sl@0
   920
    return type_t(composite_type_t(new_3<T>(),
sl@0
   921
        as_actor<A>::convert(a),
sl@0
   922
        as_actor<B>::convert(b),
sl@0
   923
        as_actor<C>::convert(c)
sl@0
   924
    ));
sl@0
   925
}
sl@0
   926
sl@0
   927
#if PHOENIX_CONSTRUCT_LIMIT > 3
sl@0
   928
//////////////////////////////////
sl@0
   929
template <
sl@0
   930
    typename T, typename A, typename B, typename C, typename D
sl@0
   931
>
sl@0
   932
inline typename impl::make_composite<new_4<T>, A, B, C, D>::type
sl@0
   933
new_(
sl@0
   934
    A const& a, B const& b, C const& c, D const& d)
sl@0
   935
{
sl@0
   936
    typedef
sl@0
   937
        impl::make_composite<new_4<T>, A, B, C, D>
sl@0
   938
        make_composite_t;
sl@0
   939
    typedef typename make_composite_t::type type_t;
sl@0
   940
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
   941
sl@0
   942
    return type_t(composite_type_t(new_4<T>(),
sl@0
   943
        as_actor<A>::convert(a),
sl@0
   944
        as_actor<B>::convert(b),
sl@0
   945
        as_actor<C>::convert(c),
sl@0
   946
        as_actor<D>::convert(d)
sl@0
   947
    ));
sl@0
   948
}
sl@0
   949
sl@0
   950
//////////////////////////////////
sl@0
   951
template <
sl@0
   952
    typename T, typename A, typename B, typename C, typename D, typename E
sl@0
   953
>
sl@0
   954
inline typename impl::make_composite<new_5<T>, A, B, C, D, E>::type
sl@0
   955
new_(
sl@0
   956
    A const& a, B const& b, C const& c, D const& d, E const& e)
sl@0
   957
{
sl@0
   958
    typedef
sl@0
   959
        impl::make_composite<new_5<T>, A, B, C, D, E>
sl@0
   960
        make_composite_t;
sl@0
   961
    typedef typename make_composite_t::type type_t;
sl@0
   962
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
   963
sl@0
   964
    return type_t(composite_type_t(new_5<T>(),
sl@0
   965
        as_actor<A>::convert(a),
sl@0
   966
        as_actor<B>::convert(b),
sl@0
   967
        as_actor<C>::convert(c),
sl@0
   968
        as_actor<D>::convert(d),
sl@0
   969
        as_actor<E>::convert(e)
sl@0
   970
    ));
sl@0
   971
}
sl@0
   972
sl@0
   973
//////////////////////////////////
sl@0
   974
template <
sl@0
   975
    typename T, typename A, typename B, typename C, typename D, typename E,
sl@0
   976
    typename F
sl@0
   977
>
sl@0
   978
inline typename impl::make_composite<new_6<T>, A, B, C, D, E, F>::type
sl@0
   979
new_(
sl@0
   980
    A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
   981
    F const& f)
sl@0
   982
{
sl@0
   983
    typedef
sl@0
   984
        impl::make_composite<new_6<T>, A, B, C, D, E, F>
sl@0
   985
        make_composite_t;
sl@0
   986
    typedef typename make_composite_t::type type_t;
sl@0
   987
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
   988
sl@0
   989
    return type_t(composite_type_t(new_6<T>(),
sl@0
   990
        as_actor<A>::convert(a),
sl@0
   991
        as_actor<B>::convert(b),
sl@0
   992
        as_actor<C>::convert(c),
sl@0
   993
        as_actor<D>::convert(d),
sl@0
   994
        as_actor<E>::convert(e),
sl@0
   995
        as_actor<F>::convert(f)
sl@0
   996
    ));
sl@0
   997
}
sl@0
   998
sl@0
   999
#if PHOENIX_CONSTRUCT_LIMIT > 6
sl@0
  1000
//////////////////////////////////
sl@0
  1001
template <
sl@0
  1002
    typename T, typename A, typename B, typename C, typename D, typename E,
sl@0
  1003
    typename F, typename G
sl@0
  1004
>
sl@0
  1005
inline typename impl::make_composite<new_7<T>, A, B, C, D, E, F, G>::type
sl@0
  1006
new_(
sl@0
  1007
    A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
  1008
    F const& f, G const& g)
sl@0
  1009
{
sl@0
  1010
    typedef
sl@0
  1011
        impl::make_composite<new_7<T>, A, B, C, D, E, F, G>
sl@0
  1012
        make_composite_t;
sl@0
  1013
    typedef typename make_composite_t::type type_t;
sl@0
  1014
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
  1015
sl@0
  1016
    return type_t(composite_type_t(new_7<T>(),
sl@0
  1017
        as_actor<A>::convert(a),
sl@0
  1018
        as_actor<B>::convert(b),
sl@0
  1019
        as_actor<C>::convert(c),
sl@0
  1020
        as_actor<D>::convert(d),
sl@0
  1021
        as_actor<E>::convert(e),
sl@0
  1022
        as_actor<F>::convert(f),
sl@0
  1023
        as_actor<G>::convert(g)
sl@0
  1024
    ));
sl@0
  1025
}
sl@0
  1026
sl@0
  1027
//////////////////////////////////
sl@0
  1028
template <
sl@0
  1029
    typename T, typename A, typename B, typename C, typename D, typename E,
sl@0
  1030
    typename F, typename G, typename H
sl@0
  1031
>
sl@0
  1032
inline typename impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>::type
sl@0
  1033
new_(
sl@0
  1034
    A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
  1035
    F const& f, G const& g, H const& h)
sl@0
  1036
{
sl@0
  1037
    typedef
sl@0
  1038
        impl::make_composite<new_8<T>, A, B, C, D, E, F, G, H>
sl@0
  1039
        make_composite_t;
sl@0
  1040
    typedef typename make_composite_t::type type_t;
sl@0
  1041
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
  1042
sl@0
  1043
    return type_t(composite_type_t(new_8<T>(),
sl@0
  1044
        as_actor<A>::convert(a),
sl@0
  1045
        as_actor<B>::convert(b),
sl@0
  1046
        as_actor<C>::convert(c),
sl@0
  1047
        as_actor<D>::convert(d),
sl@0
  1048
        as_actor<E>::convert(e),
sl@0
  1049
        as_actor<F>::convert(f),
sl@0
  1050
        as_actor<G>::convert(g),
sl@0
  1051
        as_actor<H>::convert(h)
sl@0
  1052
    ));
sl@0
  1053
}
sl@0
  1054
sl@0
  1055
//////////////////////////////////
sl@0
  1056
template <
sl@0
  1057
    typename T, typename A, typename B, typename C, typename D, typename E,
sl@0
  1058
    typename F, typename G, typename H, typename I
sl@0
  1059
>
sl@0
  1060
inline typename impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>::type
sl@0
  1061
new_(
sl@0
  1062
    A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
  1063
    F const& f, G const& g, H const& h, I const& i)
sl@0
  1064
{
sl@0
  1065
    typedef
sl@0
  1066
        impl::make_composite<new_9<T>, A, B, C, D, E, F, G, H, I>
sl@0
  1067
        make_composite_t;
sl@0
  1068
    typedef typename make_composite_t::type type_t;
sl@0
  1069
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
  1070
sl@0
  1071
    return type_t(composite_type_t(new_9<T>(),
sl@0
  1072
        as_actor<A>::convert(a),
sl@0
  1073
        as_actor<B>::convert(b),
sl@0
  1074
        as_actor<C>::convert(c),
sl@0
  1075
        as_actor<D>::convert(d),
sl@0
  1076
        as_actor<E>::convert(e),
sl@0
  1077
        as_actor<F>::convert(f),
sl@0
  1078
        as_actor<G>::convert(g),
sl@0
  1079
        as_actor<H>::convert(h),
sl@0
  1080
        as_actor<I>::convert(i)
sl@0
  1081
    ));
sl@0
  1082
}
sl@0
  1083
sl@0
  1084
#if PHOENIX_CONSTRUCT_LIMIT > 9
sl@0
  1085
//////////////////////////////////
sl@0
  1086
template <
sl@0
  1087
    typename T, typename A, typename B, typename C, typename D, typename E,
sl@0
  1088
    typename F, typename G, typename H, typename I, typename J
sl@0
  1089
>
sl@0
  1090
inline typename impl::make_composite<
sl@0
  1091
    new_10<T>, A, B, C, D, E, F, G, H, I, J>::type
sl@0
  1092
new_(
sl@0
  1093
    A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
  1094
    F const& f, G const& g, H const& h, I const& i, J const& j)
sl@0
  1095
{
sl@0
  1096
    typedef
sl@0
  1097
        impl::make_composite<
sl@0
  1098
            new_10<T>, A, B, C, D, E, F, G, H, I, J
sl@0
  1099
        >
sl@0
  1100
        make_composite_t;
sl@0
  1101
    typedef typename make_composite_t::type type_t;
sl@0
  1102
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
  1103
sl@0
  1104
    return type_t(composite_type_t(new_10<T>(),
sl@0
  1105
        as_actor<A>::convert(a),
sl@0
  1106
        as_actor<B>::convert(b),
sl@0
  1107
        as_actor<C>::convert(c),
sl@0
  1108
        as_actor<D>::convert(d),
sl@0
  1109
        as_actor<E>::convert(e),
sl@0
  1110
        as_actor<F>::convert(f),
sl@0
  1111
        as_actor<G>::convert(g),
sl@0
  1112
        as_actor<H>::convert(h),
sl@0
  1113
        as_actor<I>::convert(i),
sl@0
  1114
        as_actor<J>::convert(j)
sl@0
  1115
    ));
sl@0
  1116
}
sl@0
  1117
sl@0
  1118
//////////////////////////////////
sl@0
  1119
template <
sl@0
  1120
    typename T, typename A, typename B, typename C, typename D, typename E,
sl@0
  1121
    typename F, typename G, typename H, typename I, typename J, typename K
sl@0
  1122
>
sl@0
  1123
inline typename impl::make_composite<
sl@0
  1124
    new_11<T>, A, B, C, D, E, F, G, H, I, J, K>::type
sl@0
  1125
new_(
sl@0
  1126
    A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
  1127
    F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
  1128
    K const& k)
sl@0
  1129
{
sl@0
  1130
    typedef
sl@0
  1131
        impl::make_composite<
sl@0
  1132
            new_11<T>, A, B, C, D, E, F, G, H, I, J, K
sl@0
  1133
        >
sl@0
  1134
        make_composite_t;
sl@0
  1135
    typedef typename make_composite_t::type type_t;
sl@0
  1136
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
  1137
sl@0
  1138
    return type_t(composite_type_t(new_11<T>(),
sl@0
  1139
        as_actor<A>::convert(a),
sl@0
  1140
        as_actor<B>::convert(b),
sl@0
  1141
        as_actor<C>::convert(c),
sl@0
  1142
        as_actor<D>::convert(d),
sl@0
  1143
        as_actor<E>::convert(e),
sl@0
  1144
        as_actor<F>::convert(f),
sl@0
  1145
        as_actor<G>::convert(g),
sl@0
  1146
        as_actor<H>::convert(h),
sl@0
  1147
        as_actor<I>::convert(i),
sl@0
  1148
        as_actor<J>::convert(j),
sl@0
  1149
        as_actor<K>::convert(k)
sl@0
  1150
    ));
sl@0
  1151
}
sl@0
  1152
sl@0
  1153
//////////////////////////////////
sl@0
  1154
template <
sl@0
  1155
    typename T, typename A, typename B, typename C, typename D, typename E,
sl@0
  1156
    typename F, typename G, typename H, typename I, typename J, typename K,
sl@0
  1157
    typename L
sl@0
  1158
>
sl@0
  1159
inline typename impl::make_composite<
sl@0
  1160
    new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L>::type
sl@0
  1161
new_(
sl@0
  1162
    A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
  1163
    F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
  1164
    K const& k, L const& l)
sl@0
  1165
{
sl@0
  1166
    typedef
sl@0
  1167
        impl::make_composite<
sl@0
  1168
            new_12<T>, A, B, C, D, E, F, G, H, I, J, K, L
sl@0
  1169
        >
sl@0
  1170
        make_composite_t;
sl@0
  1171
    typedef typename make_composite_t::type type_t;
sl@0
  1172
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
  1173
sl@0
  1174
    return type_t(composite_type_t(new_12<T>(),
sl@0
  1175
        as_actor<A>::convert(a),
sl@0
  1176
        as_actor<B>::convert(b),
sl@0
  1177
        as_actor<C>::convert(c),
sl@0
  1178
        as_actor<D>::convert(d),
sl@0
  1179
        as_actor<E>::convert(e),
sl@0
  1180
        as_actor<F>::convert(f),
sl@0
  1181
        as_actor<G>::convert(g),
sl@0
  1182
        as_actor<H>::convert(h),
sl@0
  1183
        as_actor<I>::convert(i),
sl@0
  1184
        as_actor<J>::convert(j),
sl@0
  1185
        as_actor<K>::convert(k),
sl@0
  1186
        as_actor<L>::convert(l)
sl@0
  1187
    ));
sl@0
  1188
}
sl@0
  1189
sl@0
  1190
#if PHOENIX_CONSTRUCT_LIMIT > 12
sl@0
  1191
//////////////////////////////////
sl@0
  1192
template <
sl@0
  1193
    typename T, typename A, typename B, typename C, typename D, typename E,
sl@0
  1194
    typename F, typename G, typename H, typename I, typename J, typename K,
sl@0
  1195
    typename L, typename M
sl@0
  1196
>
sl@0
  1197
inline typename impl::make_composite<
sl@0
  1198
    new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
sl@0
  1199
new_(
sl@0
  1200
    A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
  1201
    F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
  1202
    K const& k, L const& l, M const& m)
sl@0
  1203
{
sl@0
  1204
    typedef
sl@0
  1205
        impl::make_composite<
sl@0
  1206
            new_13<T>, A, B, C, D, E, F, G, H, I, J, K, L, M
sl@0
  1207
        >
sl@0
  1208
        make_composite_t;
sl@0
  1209
    typedef typename make_composite_t::type type_t;
sl@0
  1210
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
  1211
sl@0
  1212
    return type_t(composite_type_t(new_13<T>(),
sl@0
  1213
        as_actor<A>::convert(a),
sl@0
  1214
        as_actor<B>::convert(b),
sl@0
  1215
        as_actor<C>::convert(c),
sl@0
  1216
        as_actor<D>::convert(d),
sl@0
  1217
        as_actor<E>::convert(e),
sl@0
  1218
        as_actor<F>::convert(f),
sl@0
  1219
        as_actor<G>::convert(g),
sl@0
  1220
        as_actor<H>::convert(h),
sl@0
  1221
        as_actor<I>::convert(i),
sl@0
  1222
        as_actor<J>::convert(j),
sl@0
  1223
        as_actor<K>::convert(k),
sl@0
  1224
        as_actor<L>::convert(l),
sl@0
  1225
        as_actor<M>::convert(m)
sl@0
  1226
    ));
sl@0
  1227
}
sl@0
  1228
sl@0
  1229
//////////////////////////////////
sl@0
  1230
template <
sl@0
  1231
    typename T, typename A, typename B, typename C, typename D, typename E,
sl@0
  1232
    typename F, typename G, typename H, typename I, typename J, typename K,
sl@0
  1233
    typename L, typename M, typename N
sl@0
  1234
>
sl@0
  1235
inline typename impl::make_composite<
sl@0
  1236
    new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M>::type
sl@0
  1237
new_(
sl@0
  1238
    A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
  1239
    F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
  1240
    K const& k, L const& l, M const& m, N const& n)
sl@0
  1241
{
sl@0
  1242
    typedef
sl@0
  1243
        impl::make_composite<
sl@0
  1244
            new_14<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N
sl@0
  1245
        >
sl@0
  1246
        make_composite_t;
sl@0
  1247
    typedef typename make_composite_t::type type_t;
sl@0
  1248
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
  1249
sl@0
  1250
    return type_t(composite_type_t(new_14<T>(),
sl@0
  1251
        as_actor<A>::convert(a),
sl@0
  1252
        as_actor<B>::convert(b),
sl@0
  1253
        as_actor<C>::convert(c),
sl@0
  1254
        as_actor<D>::convert(d),
sl@0
  1255
        as_actor<E>::convert(e),
sl@0
  1256
        as_actor<F>::convert(f),
sl@0
  1257
        as_actor<G>::convert(g),
sl@0
  1258
        as_actor<H>::convert(h),
sl@0
  1259
        as_actor<I>::convert(i),
sl@0
  1260
        as_actor<J>::convert(j),
sl@0
  1261
        as_actor<K>::convert(k),
sl@0
  1262
        as_actor<L>::convert(l),
sl@0
  1263
        as_actor<M>::convert(m),
sl@0
  1264
        as_actor<N>::convert(n)
sl@0
  1265
    ));
sl@0
  1266
}
sl@0
  1267
sl@0
  1268
//////////////////////////////////
sl@0
  1269
template <
sl@0
  1270
    typename T, typename A, typename B, typename C, typename D, typename E,
sl@0
  1271
    typename F, typename G, typename H, typename I, typename J, typename K,
sl@0
  1272
    typename L, typename M, typename N, typename O
sl@0
  1273
>
sl@0
  1274
inline typename impl::make_composite<
sl@0
  1275
    new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, O>::type
sl@0
  1276
new_(
sl@0
  1277
    A const& a, B const& b, C const& c, D const& d, E const& e,
sl@0
  1278
    F const& f, G const& g, H const& h, I const& i, J const& j,
sl@0
  1279
    K const& k, L const& l, M const& m, N const& n, O const& o)
sl@0
  1280
{
sl@0
  1281
    typedef
sl@0
  1282
        impl::make_composite<
sl@0
  1283
            new_15<T>, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
sl@0
  1284
        >
sl@0
  1285
        make_composite_t;
sl@0
  1286
    typedef typename make_composite_t::type type_t;
sl@0
  1287
    typedef typename make_composite_t::composite_type composite_type_t;
sl@0
  1288
sl@0
  1289
    return type_t(composite_type_t(new_15<T>(),
sl@0
  1290
        as_actor<A>::convert(a),
sl@0
  1291
        as_actor<B>::convert(b),
sl@0
  1292
        as_actor<C>::convert(c),
sl@0
  1293
        as_actor<D>::convert(d),
sl@0
  1294
        as_actor<E>::convert(e),
sl@0
  1295
        as_actor<F>::convert(f),
sl@0
  1296
        as_actor<G>::convert(g),
sl@0
  1297
        as_actor<H>::convert(h),
sl@0
  1298
        as_actor<I>::convert(i),
sl@0
  1299
        as_actor<J>::convert(j),
sl@0
  1300
        as_actor<K>::convert(k),
sl@0
  1301
        as_actor<L>::convert(l),
sl@0
  1302
        as_actor<M>::convert(m),
sl@0
  1303
        as_actor<N>::convert(n),
sl@0
  1304
        as_actor<O>::convert(o)
sl@0
  1305
    ));
sl@0
  1306
}
sl@0
  1307
sl@0
  1308
#endif
sl@0
  1309
#endif
sl@0
  1310
#endif
sl@0
  1311
#endif
sl@0
  1312
sl@0
  1313
///////////////////////////////////////////////////////////////////////////////
sl@0
  1314
}   //  namespace phoenix
sl@0
  1315
sl@0
  1316
#endif // PHOENIX_NEW_HPP