src/core/type-traits.h
author Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
Fri, 11 Jul 2008 18:39:19 +0100
changeset 3416 926ccb845111
parent 1684 0b0442dfc799
permissions -rw-r--r--
Rescan APIs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
947
755e3df63fc2 fix testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
#ifndef TYPE_TRAITS_H
755e3df63fc2 fix testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
#define TYPE_TRAITS_H
755e3df63fc2 fix testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
755e3df63fc2 fix testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
template <typename T>
755e3df63fc2 fix testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
struct TypeTraits
755e3df63fc2 fix testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
{
1678
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
     7
private:
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
     8
  struct NullType {};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
     9
  template <typename U> struct UnConst
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    10
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    11
    typedef U Result;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    12
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    13
  template <typename U> struct UnConst<const U>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    14
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    15
    typedef U Result;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    16
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    17
  template <typename U> struct ReferenceTraits
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    18
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    19
    enum {IsReference = 0};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    20
    typedef U ReferencedType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    21
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    22
  template <typename U> struct ReferenceTraits<U&>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    23
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    24
    enum {IsReference = 1};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    25
    typedef U ReferencedType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    26
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    27
  template <typename U> struct PointerTraits
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    28
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    29
    enum {IsPointer = 0};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    30
    typedef U PointeeType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    31
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    32
  template <typename U> struct PointerTraits<U *>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    33
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    34
    enum {IsPointer = 1};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    35
    typedef U PointeeType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    36
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    37
  template <typename U> struct FunctionPtrTraits
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    38
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    39
    enum {IsFunctionPointer = 0};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    40
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    41
  template <typename U> 
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    42
  struct FunctionPtrTraits <U (*) (void)>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    43
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    44
    enum {IsFunctionPointer = 1};
1679
4160d5d5041d forgot to add the nArgs enum in FunctionPtrTraits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1678
diff changeset
    45
    enum {nArgs = 0};
1678
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    46
    typedef U ReturnType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    47
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    48
  template <typename U, typename V1> 
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    49
  struct FunctionPtrTraits <U (*) (V1)>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    50
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    51
    enum {IsFunctionPointer = 1};
1679
4160d5d5041d forgot to add the nArgs enum in FunctionPtrTraits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1678
diff changeset
    52
    enum {nArgs = 1};
1678
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    53
    typedef U ReturnType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    54
    typedef V1 Arg1Type;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    55
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    56
  template <typename U, typename V1, typename V2> 
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    57
  struct FunctionPtrTraits <U (*) (V1,V2)>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    58
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    59
    enum {IsFunctionPointer = 1};
1679
4160d5d5041d forgot to add the nArgs enum in FunctionPtrTraits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1678
diff changeset
    60
    enum {nArgs = 2};
1678
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    61
    typedef U ReturnType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    62
    typedef V1 Arg1Type;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    63
    typedef V2 Arg2Type;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
    64
  };
1684
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    65
  template <typename U, typename V1, typename V2,
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    66
            typename V3> 
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    67
  struct FunctionPtrTraits <U (*) (V1,V2,V3)>
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    68
  {
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    69
    enum {IsFunctionPointer = 1};
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    70
    enum {nArgs = 3};
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    71
    typedef U ReturnType;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    72
    typedef V1 Arg1Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    73
    typedef V2 Arg2Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    74
    typedef V3 Arg3Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    75
  };
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    76
  template <typename U, typename V1, typename V2,
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    77
            typename V3, typename V4> 
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    78
  struct FunctionPtrTraits <U (*) (V1,V2,V3,V4)>
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    79
  {
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    80
    enum {IsFunctionPointer = 1};
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    81
    enum {nArgs = 4};
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    82
    typedef U ReturnType;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    83
    typedef V1 Arg1Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    84
    typedef V2 Arg2Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    85
    typedef V3 Arg3Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    86
    typedef V4 Arg4Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    87
  };
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    88
  template <typename U, typename V1, typename V2,
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    89
            typename V3, typename V4,
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    90
            typename V5> 
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    91
  struct FunctionPtrTraits <U (*) (V1,V2,V3,V4,V5)>
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    92
  {
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    93
    enum {IsFunctionPointer = 1};
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    94
    enum {nArgs = 5};
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    95
    typedef U ReturnType;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    96
    typedef V1 Arg1Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    97
    typedef V2 Arg2Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    98
    typedef V3 Arg3Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
    99
    typedef V4 Arg4Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   100
    typedef V5 Arg5Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   101
  };
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   102
  template <typename U, typename V1, typename V2,
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   103
            typename V3, typename V4,
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   104
            typename V5, typename V6> 
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   105
  struct FunctionPtrTraits <U (*) (V1,V2,V3,V4,V5,V6)>
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   106
  {
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   107
    enum {IsFunctionPointer = 1};
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   108
    enum {nArgs = 6};
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   109
    typedef U ReturnType;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   110
    typedef V1 Arg1Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   111
    typedef V2 Arg2Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   112
    typedef V3 Arg3Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   113
    typedef V4 Arg4Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   114
    typedef V5 Arg5Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   115
    typedef V6 Arg6Type;
0b0442dfc799 add 6 arg support to pointer to function traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1683
diff changeset
   116
  };
1678
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   117
  template <typename U> struct PtrToMemberTraits
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   118
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   119
    enum {IsPointerToMember = 0};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   120
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   121
  template <typename U, typename V> 
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   122
  struct PtrToMemberTraits <U (V::*) (void)>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   123
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   124
    enum {IsPointerToMember = 1};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   125
    enum {nArgs = 0};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   126
    typedef U ReturnType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   127
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   128
  template <typename U, typename V> 
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   129
  struct PtrToMemberTraits <U (V::*) (void) const>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   130
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   131
    enum {IsPointerToMember = 1};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   132
    enum {nArgs = 0};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   133
    typedef U ReturnType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   134
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   135
  template <typename U, typename V,typename W1> 
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   136
  struct PtrToMemberTraits <U (V::*) (W1)>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   137
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   138
    enum {IsPointerToMember = 1};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   139
    enum {nArgs = 1};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   140
    typedef U ReturnType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   141
    typedef W1 Arg1Type;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   142
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   143
  template <typename U, typename V,typename W1> 
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   144
  struct PtrToMemberTraits <U (V::*) (W1) const>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   145
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   146
    enum {IsPointerToMember = 1};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   147
    enum {nArgs = 1};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   148
    typedef U ReturnType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   149
    typedef W1 Arg1Type;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   150
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   151
  template <typename U, typename V,typename W1, typename W2> 
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   152
  struct PtrToMemberTraits <U (V::*) (W1,W2)>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   153
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   154
    enum {IsPointerToMember = 1};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   155
    enum {nArgs = 2};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   156
    typedef U ReturnType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   157
    typedef W1 Arg1Type;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   158
    typedef W2 Arg2Type;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   159
  };
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   160
  template <typename U, typename V,typename W1, typename W2> 
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   161
  struct PtrToMemberTraits <U (V::*) (W1,W2) const>
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   162
  {
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   163
    enum {IsPointerToMember = 1};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   164
    enum {nArgs = 2};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   165
    typedef U ReturnType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   166
    typedef W1 Arg1Type;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   167
    typedef W2 Arg2Type;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   168
  };
1683
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   169
  template <typename U, typename V,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   170
            typename W1, typename W2,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   171
            typename W3> 
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   172
  struct PtrToMemberTraits <U (V::*) (W1,W2,W3)>
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   173
  {
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   174
    enum {IsPointerToMember = 1};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   175
    enum {nArgs = 3};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   176
    typedef U ReturnType;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   177
    typedef W1 Arg1Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   178
    typedef W2 Arg2Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   179
    typedef W3 Arg3Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   180
  };
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   181
  template <typename U, typename V,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   182
            typename W1, typename W2,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   183
            typename W3> 
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   184
  struct PtrToMemberTraits <U (V::*) (W1,W2,W3) const>
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   185
  {
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   186
    enum {IsPointerToMember = 1};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   187
    enum {nArgs = 3};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   188
    typedef U ReturnType;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   189
    typedef W1 Arg1Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   190
    typedef W2 Arg2Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   191
    typedef W3 Arg3Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   192
  };
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   193
  template <typename U, typename V,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   194
            typename W1, typename W2,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   195
            typename W3, typename W4> 
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   196
  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4)>
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   197
  {
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   198
    enum {IsPointerToMember = 1};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   199
    enum {nArgs = 4};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   200
    typedef U ReturnType;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   201
    typedef W1 Arg1Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   202
    typedef W2 Arg2Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   203
    typedef W3 Arg3Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   204
    typedef W4 Arg4Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   205
  };
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   206
  template <typename U, typename V,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   207
            typename W1, typename W2,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   208
            typename W3, typename W4> 
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   209
  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4) const>
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   210
  {
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   211
    enum {IsPointerToMember = 1};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   212
    enum {nArgs = 4};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   213
    typedef U ReturnType;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   214
    typedef W1 Arg1Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   215
    typedef W2 Arg2Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   216
    typedef W3 Arg3Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   217
    typedef W4 Arg4Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   218
  };
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   219
  template <typename U, typename V,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   220
            typename W1, typename W2,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   221
            typename W3, typename W4,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   222
            typename W5> 
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   223
  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5)>
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   224
  {
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   225
    enum {IsPointerToMember = 1};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   226
    enum {nArgs = 5};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   227
    typedef U ReturnType;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   228
    typedef W1 Arg1Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   229
    typedef W2 Arg2Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   230
    typedef W3 Arg3Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   231
    typedef W4 Arg4Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   232
    typedef W5 Arg5Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   233
  };
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   234
  template <typename U, typename V,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   235
            typename W1, typename W2,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   236
            typename W3, typename W4,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   237
            typename W5> 
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   238
  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5) const>
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   239
  {
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   240
    enum {IsPointerToMember = 1};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   241
    enum {nArgs = 5};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   242
    typedef U ReturnType;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   243
    typedef W1 Arg1Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   244
    typedef W2 Arg2Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   245
    typedef W3 Arg3Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   246
    typedef W4 Arg4Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   247
    typedef W5 Arg5Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   248
  };
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   249
  template <typename U, typename V,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   250
            typename W1, typename W2,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   251
            typename W3, typename W4,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   252
            typename W5, typename W6> 
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   253
  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5,W6)>
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   254
  {
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   255
    enum {IsPointerToMember = 1};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   256
    enum {nArgs = 6};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   257
    typedef U ReturnType;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   258
    typedef W1 Arg1Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   259
    typedef W2 Arg2Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   260
    typedef W3 Arg3Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   261
    typedef W4 Arg4Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   262
    typedef W5 Arg5Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   263
    typedef W6 Arg6Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   264
  };
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   265
  template <typename U, typename V,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   266
            typename W1, typename W2,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   267
            typename W3, typename W4,
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   268
            typename W5, typename W6> 
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   269
  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5,W6) const>
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   270
  {
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   271
    enum {IsPointerToMember = 1};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   272
    enum {nArgs = 6};
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   273
    typedef U ReturnType;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   274
    typedef W1 Arg1Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   275
    typedef W2 Arg2Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   276
    typedef W3 Arg3Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   277
    typedef W4 Arg4Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   278
    typedef W5 Arg5Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   279
    typedef W6 Arg6Type;
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   280
  };
e4adb8cd4fc6 add 6 arg support to pointer to member traits
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1679
diff changeset
   281
1678
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   282
public:
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   283
  typedef typename UnConst<T>::Result NonConstType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   284
  typedef typename ReferenceTraits<T>::ReferencedType ReferencedType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   285
  typedef typename PointerTraits<T>::PointeeType PointeeType;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   286
  enum {IsPointerToMember = PtrToMemberTraits<T>::IsPointerToMember};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   287
  enum {IsPointer = PointerTraits<T>::IsPointer};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   288
  enum {IsReference = ReferenceTraits<T>::IsReference};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   289
  enum {IsFunctionPointer = FunctionPtrTraits<T>::IsFunctionPointer};
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   290
  typedef PtrToMemberTraits<T> PointerToMemberTraits;
00452ae23a6f rewrite the TypeTraits and add some tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1672
diff changeset
   291
  typedef FunctionPtrTraits<T> FunctionPointerTraits;
947
755e3df63fc2 fix testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
};
755e3df63fc2 fix testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
755e3df63fc2 fix testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
755e3df63fc2 fix testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
#endif /* TYPE_TRAITS_H */