PageRenderTime 353ms CodeModel.GetById 61ms app.highlight 215ms RepoModel.GetById 30ms app.codeStats 3ms

/Unittests/googletest/include/gtest/internal/gtest-type-util.h

http://unladen-swallow.googlecode.com/
C++ Header | 3321 lines | 3077 code | 137 blank | 107 comment | 2 complexity | 2fdcedd689e1d34a38c667fe7ac38c15 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

   1// This file was GENERATED by a script.  DO NOT EDIT BY HAND!!!
   2
   3// Copyright 2008 Google Inc.
   4// All Rights Reserved.
   5//
   6// Redistribution and use in source and binary forms, with or without
   7// modification, are permitted provided that the following conditions are
   8// met:
   9//
  10//     * Redistributions of source code must retain the above copyright
  11// notice, this list of conditions and the following disclaimer.
  12//     * Redistributions in binary form must reproduce the above
  13// copyright notice, this list of conditions and the following disclaimer
  14// in the documentation and/or other materials provided with the
  15// distribution.
  16//     * Neither the name of Google Inc. nor the names of its
  17// contributors may be used to endorse or promote products derived from
  18// this software without specific prior written permission.
  19//
  20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  23// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  24// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  25// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  26// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31//
  32// Author: wan@google.com (Zhanyong Wan)
  33
  34// Type utilities needed for implementing typed and type-parameterized
  35// tests.  This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
  36//
  37// Currently we support at most 50 types in a list, and at most 50
  38// type-parameterized tests in one type-parameterized test case.
  39// Please contact googletestframework@googlegroups.com if you need
  40// more.
  41
  42#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
  43#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
  44
  45#include <gtest/internal/gtest-port.h>
  46#include <gtest/internal/gtest-string.h>
  47
  48#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
  49
  50// #ifdef __GNUC__ is too general here.  It is possible to use gcc without using
  51// libstdc++ (which is where cxxabi.h comes from).
  52#ifdef __GLIBCXX__
  53#include <cxxabi.h>
  54#endif  // __GLIBCXX__
  55
  56#include <typeinfo>
  57
  58namespace testing {
  59namespace internal {
  60
  61// AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same
  62// type.  This can be used as a compile-time assertion to ensure that
  63// two types are equal.
  64
  65template <typename T1, typename T2>
  66struct AssertTypeEq;
  67
  68template <typename T>
  69struct AssertTypeEq<T, T> {
  70  typedef bool type;
  71};
  72
  73// GetTypeName<T>() returns a human-readable name of type T.
  74template <typename T>
  75String GetTypeName() {
  76#if GTEST_HAS_RTTI
  77
  78  const char* const name = typeid(T).name();
  79#ifdef __GLIBCXX__
  80  int status = 0;
  81  // gcc's implementation of typeid(T).name() mangles the type name,
  82  // so we have to demangle it.
  83  char* const readable_name = abi::__cxa_demangle(name, 0, 0, &status);
  84  const String name_str(status == 0 ? readable_name : name);
  85  free(readable_name);
  86  return name_str;
  87#else
  88  return name;
  89#endif  // __GLIBCXX__
  90
  91#else
  92  return "<type>";
  93#endif  // GTEST_HAS_RTTI
  94}
  95
  96// A unique type used as the default value for the arguments of class
  97// template Types.  This allows us to simulate variadic templates
  98// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
  99// support directly.
 100struct None {};
 101
 102// The following family of struct and struct templates are used to
 103// represent type lists.  In particular, TypesN<T1, T2, ..., TN>
 104// represents a type list with N types (T1, T2, ..., and TN) in it.
 105// Except for Types0, every struct in the family has two member types:
 106// Head for the first type in the list, and Tail for the rest of the
 107// list.
 108
 109// The empty type list.
 110struct Types0 {};
 111
 112// Type lists of length 1, 2, 3, and so on.
 113
 114template <typename T1>
 115struct Types1 {
 116  typedef T1 Head;
 117  typedef Types0 Tail;
 118};
 119template <typename T1, typename T2>
 120struct Types2 {
 121  typedef T1 Head;
 122  typedef Types1<T2> Tail;
 123};
 124
 125template <typename T1, typename T2, typename T3>
 126struct Types3 {
 127  typedef T1 Head;
 128  typedef Types2<T2, T3> Tail;
 129};
 130
 131template <typename T1, typename T2, typename T3, typename T4>
 132struct Types4 {
 133  typedef T1 Head;
 134  typedef Types3<T2, T3, T4> Tail;
 135};
 136
 137template <typename T1, typename T2, typename T3, typename T4, typename T5>
 138struct Types5 {
 139  typedef T1 Head;
 140  typedef Types4<T2, T3, T4, T5> Tail;
 141};
 142
 143template <typename T1, typename T2, typename T3, typename T4, typename T5,
 144    typename T6>
 145struct Types6 {
 146  typedef T1 Head;
 147  typedef Types5<T2, T3, T4, T5, T6> Tail;
 148};
 149
 150template <typename T1, typename T2, typename T3, typename T4, typename T5,
 151    typename T6, typename T7>
 152struct Types7 {
 153  typedef T1 Head;
 154  typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
 155};
 156
 157template <typename T1, typename T2, typename T3, typename T4, typename T5,
 158    typename T6, typename T7, typename T8>
 159struct Types8 {
 160  typedef T1 Head;
 161  typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
 162};
 163
 164template <typename T1, typename T2, typename T3, typename T4, typename T5,
 165    typename T6, typename T7, typename T8, typename T9>
 166struct Types9 {
 167  typedef T1 Head;
 168  typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
 169};
 170
 171template <typename T1, typename T2, typename T3, typename T4, typename T5,
 172    typename T6, typename T7, typename T8, typename T9, typename T10>
 173struct Types10 {
 174  typedef T1 Head;
 175  typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
 176};
 177
 178template <typename T1, typename T2, typename T3, typename T4, typename T5,
 179    typename T6, typename T7, typename T8, typename T9, typename T10,
 180    typename T11>
 181struct Types11 {
 182  typedef T1 Head;
 183  typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
 184};
 185
 186template <typename T1, typename T2, typename T3, typename T4, typename T5,
 187    typename T6, typename T7, typename T8, typename T9, typename T10,
 188    typename T11, typename T12>
 189struct Types12 {
 190  typedef T1 Head;
 191  typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
 192};
 193
 194template <typename T1, typename T2, typename T3, typename T4, typename T5,
 195    typename T6, typename T7, typename T8, typename T9, typename T10,
 196    typename T11, typename T12, typename T13>
 197struct Types13 {
 198  typedef T1 Head;
 199  typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
 200};
 201
 202template <typename T1, typename T2, typename T3, typename T4, typename T5,
 203    typename T6, typename T7, typename T8, typename T9, typename T10,
 204    typename T11, typename T12, typename T13, typename T14>
 205struct Types14 {
 206  typedef T1 Head;
 207  typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
 208};
 209
 210template <typename T1, typename T2, typename T3, typename T4, typename T5,
 211    typename T6, typename T7, typename T8, typename T9, typename T10,
 212    typename T11, typename T12, typename T13, typename T14, typename T15>
 213struct Types15 {
 214  typedef T1 Head;
 215  typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 216      T15> Tail;
 217};
 218
 219template <typename T1, typename T2, typename T3, typename T4, typename T5,
 220    typename T6, typename T7, typename T8, typename T9, typename T10,
 221    typename T11, typename T12, typename T13, typename T14, typename T15,
 222    typename T16>
 223struct Types16 {
 224  typedef T1 Head;
 225  typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 226      T16> Tail;
 227};
 228
 229template <typename T1, typename T2, typename T3, typename T4, typename T5,
 230    typename T6, typename T7, typename T8, typename T9, typename T10,
 231    typename T11, typename T12, typename T13, typename T14, typename T15,
 232    typename T16, typename T17>
 233struct Types17 {
 234  typedef T1 Head;
 235  typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 236      T16, T17> Tail;
 237};
 238
 239template <typename T1, typename T2, typename T3, typename T4, typename T5,
 240    typename T6, typename T7, typename T8, typename T9, typename T10,
 241    typename T11, typename T12, typename T13, typename T14, typename T15,
 242    typename T16, typename T17, typename T18>
 243struct Types18 {
 244  typedef T1 Head;
 245  typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 246      T16, T17, T18> Tail;
 247};
 248
 249template <typename T1, typename T2, typename T3, typename T4, typename T5,
 250    typename T6, typename T7, typename T8, typename T9, typename T10,
 251    typename T11, typename T12, typename T13, typename T14, typename T15,
 252    typename T16, typename T17, typename T18, typename T19>
 253struct Types19 {
 254  typedef T1 Head;
 255  typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 256      T16, T17, T18, T19> Tail;
 257};
 258
 259template <typename T1, typename T2, typename T3, typename T4, typename T5,
 260    typename T6, typename T7, typename T8, typename T9, typename T10,
 261    typename T11, typename T12, typename T13, typename T14, typename T15,
 262    typename T16, typename T17, typename T18, typename T19, typename T20>
 263struct Types20 {
 264  typedef T1 Head;
 265  typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 266      T16, T17, T18, T19, T20> Tail;
 267};
 268
 269template <typename T1, typename T2, typename T3, typename T4, typename T5,
 270    typename T6, typename T7, typename T8, typename T9, typename T10,
 271    typename T11, typename T12, typename T13, typename T14, typename T15,
 272    typename T16, typename T17, typename T18, typename T19, typename T20,
 273    typename T21>
 274struct Types21 {
 275  typedef T1 Head;
 276  typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 277      T16, T17, T18, T19, T20, T21> Tail;
 278};
 279
 280template <typename T1, typename T2, typename T3, typename T4, typename T5,
 281    typename T6, typename T7, typename T8, typename T9, typename T10,
 282    typename T11, typename T12, typename T13, typename T14, typename T15,
 283    typename T16, typename T17, typename T18, typename T19, typename T20,
 284    typename T21, typename T22>
 285struct Types22 {
 286  typedef T1 Head;
 287  typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 288      T16, T17, T18, T19, T20, T21, T22> Tail;
 289};
 290
 291template <typename T1, typename T2, typename T3, typename T4, typename T5,
 292    typename T6, typename T7, typename T8, typename T9, typename T10,
 293    typename T11, typename T12, typename T13, typename T14, typename T15,
 294    typename T16, typename T17, typename T18, typename T19, typename T20,
 295    typename T21, typename T22, typename T23>
 296struct Types23 {
 297  typedef T1 Head;
 298  typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 299      T16, T17, T18, T19, T20, T21, T22, T23> Tail;
 300};
 301
 302template <typename T1, typename T2, typename T3, typename T4, typename T5,
 303    typename T6, typename T7, typename T8, typename T9, typename T10,
 304    typename T11, typename T12, typename T13, typename T14, typename T15,
 305    typename T16, typename T17, typename T18, typename T19, typename T20,
 306    typename T21, typename T22, typename T23, typename T24>
 307struct Types24 {
 308  typedef T1 Head;
 309  typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 310      T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
 311};
 312
 313template <typename T1, typename T2, typename T3, typename T4, typename T5,
 314    typename T6, typename T7, typename T8, typename T9, typename T10,
 315    typename T11, typename T12, typename T13, typename T14, typename T15,
 316    typename T16, typename T17, typename T18, typename T19, typename T20,
 317    typename T21, typename T22, typename T23, typename T24, typename T25>
 318struct Types25 {
 319  typedef T1 Head;
 320  typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 321      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
 322};
 323
 324template <typename T1, typename T2, typename T3, typename T4, typename T5,
 325    typename T6, typename T7, typename T8, typename T9, typename T10,
 326    typename T11, typename T12, typename T13, typename T14, typename T15,
 327    typename T16, typename T17, typename T18, typename T19, typename T20,
 328    typename T21, typename T22, typename T23, typename T24, typename T25,
 329    typename T26>
 330struct Types26 {
 331  typedef T1 Head;
 332  typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 333      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
 334};
 335
 336template <typename T1, typename T2, typename T3, typename T4, typename T5,
 337    typename T6, typename T7, typename T8, typename T9, typename T10,
 338    typename T11, typename T12, typename T13, typename T14, typename T15,
 339    typename T16, typename T17, typename T18, typename T19, typename T20,
 340    typename T21, typename T22, typename T23, typename T24, typename T25,
 341    typename T26, typename T27>
 342struct Types27 {
 343  typedef T1 Head;
 344  typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 345      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
 346};
 347
 348template <typename T1, typename T2, typename T3, typename T4, typename T5,
 349    typename T6, typename T7, typename T8, typename T9, typename T10,
 350    typename T11, typename T12, typename T13, typename T14, typename T15,
 351    typename T16, typename T17, typename T18, typename T19, typename T20,
 352    typename T21, typename T22, typename T23, typename T24, typename T25,
 353    typename T26, typename T27, typename T28>
 354struct Types28 {
 355  typedef T1 Head;
 356  typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 357      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
 358};
 359
 360template <typename T1, typename T2, typename T3, typename T4, typename T5,
 361    typename T6, typename T7, typename T8, typename T9, typename T10,
 362    typename T11, typename T12, typename T13, typename T14, typename T15,
 363    typename T16, typename T17, typename T18, typename T19, typename T20,
 364    typename T21, typename T22, typename T23, typename T24, typename T25,
 365    typename T26, typename T27, typename T28, typename T29>
 366struct Types29 {
 367  typedef T1 Head;
 368  typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 369      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
 370      T29> Tail;
 371};
 372
 373template <typename T1, typename T2, typename T3, typename T4, typename T5,
 374    typename T6, typename T7, typename T8, typename T9, typename T10,
 375    typename T11, typename T12, typename T13, typename T14, typename T15,
 376    typename T16, typename T17, typename T18, typename T19, typename T20,
 377    typename T21, typename T22, typename T23, typename T24, typename T25,
 378    typename T26, typename T27, typename T28, typename T29, typename T30>
 379struct Types30 {
 380  typedef T1 Head;
 381  typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 382      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 383      T30> Tail;
 384};
 385
 386template <typename T1, typename T2, typename T3, typename T4, typename T5,
 387    typename T6, typename T7, typename T8, typename T9, typename T10,
 388    typename T11, typename T12, typename T13, typename T14, typename T15,
 389    typename T16, typename T17, typename T18, typename T19, typename T20,
 390    typename T21, typename T22, typename T23, typename T24, typename T25,
 391    typename T26, typename T27, typename T28, typename T29, typename T30,
 392    typename T31>
 393struct Types31 {
 394  typedef T1 Head;
 395  typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 396      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 397      T30, T31> Tail;
 398};
 399
 400template <typename T1, typename T2, typename T3, typename T4, typename T5,
 401    typename T6, typename T7, typename T8, typename T9, typename T10,
 402    typename T11, typename T12, typename T13, typename T14, typename T15,
 403    typename T16, typename T17, typename T18, typename T19, typename T20,
 404    typename T21, typename T22, typename T23, typename T24, typename T25,
 405    typename T26, typename T27, typename T28, typename T29, typename T30,
 406    typename T31, typename T32>
 407struct Types32 {
 408  typedef T1 Head;
 409  typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 410      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 411      T30, T31, T32> Tail;
 412};
 413
 414template <typename T1, typename T2, typename T3, typename T4, typename T5,
 415    typename T6, typename T7, typename T8, typename T9, typename T10,
 416    typename T11, typename T12, typename T13, typename T14, typename T15,
 417    typename T16, typename T17, typename T18, typename T19, typename T20,
 418    typename T21, typename T22, typename T23, typename T24, typename T25,
 419    typename T26, typename T27, typename T28, typename T29, typename T30,
 420    typename T31, typename T32, typename T33>
 421struct Types33 {
 422  typedef T1 Head;
 423  typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 424      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 425      T30, T31, T32, T33> Tail;
 426};
 427
 428template <typename T1, typename T2, typename T3, typename T4, typename T5,
 429    typename T6, typename T7, typename T8, typename T9, typename T10,
 430    typename T11, typename T12, typename T13, typename T14, typename T15,
 431    typename T16, typename T17, typename T18, typename T19, typename T20,
 432    typename T21, typename T22, typename T23, typename T24, typename T25,
 433    typename T26, typename T27, typename T28, typename T29, typename T30,
 434    typename T31, typename T32, typename T33, typename T34>
 435struct Types34 {
 436  typedef T1 Head;
 437  typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 438      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 439      T30, T31, T32, T33, T34> Tail;
 440};
 441
 442template <typename T1, typename T2, typename T3, typename T4, typename T5,
 443    typename T6, typename T7, typename T8, typename T9, typename T10,
 444    typename T11, typename T12, typename T13, typename T14, typename T15,
 445    typename T16, typename T17, typename T18, typename T19, typename T20,
 446    typename T21, typename T22, typename T23, typename T24, typename T25,
 447    typename T26, typename T27, typename T28, typename T29, typename T30,
 448    typename T31, typename T32, typename T33, typename T34, typename T35>
 449struct Types35 {
 450  typedef T1 Head;
 451  typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 452      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 453      T30, T31, T32, T33, T34, T35> Tail;
 454};
 455
 456template <typename T1, typename T2, typename T3, typename T4, typename T5,
 457    typename T6, typename T7, typename T8, typename T9, typename T10,
 458    typename T11, typename T12, typename T13, typename T14, typename T15,
 459    typename T16, typename T17, typename T18, typename T19, typename T20,
 460    typename T21, typename T22, typename T23, typename T24, typename T25,
 461    typename T26, typename T27, typename T28, typename T29, typename T30,
 462    typename T31, typename T32, typename T33, typename T34, typename T35,
 463    typename T36>
 464struct Types36 {
 465  typedef T1 Head;
 466  typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 467      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 468      T30, T31, T32, T33, T34, T35, T36> Tail;
 469};
 470
 471template <typename T1, typename T2, typename T3, typename T4, typename T5,
 472    typename T6, typename T7, typename T8, typename T9, typename T10,
 473    typename T11, typename T12, typename T13, typename T14, typename T15,
 474    typename T16, typename T17, typename T18, typename T19, typename T20,
 475    typename T21, typename T22, typename T23, typename T24, typename T25,
 476    typename T26, typename T27, typename T28, typename T29, typename T30,
 477    typename T31, typename T32, typename T33, typename T34, typename T35,
 478    typename T36, typename T37>
 479struct Types37 {
 480  typedef T1 Head;
 481  typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 482      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 483      T30, T31, T32, T33, T34, T35, T36, T37> Tail;
 484};
 485
 486template <typename T1, typename T2, typename T3, typename T4, typename T5,
 487    typename T6, typename T7, typename T8, typename T9, typename T10,
 488    typename T11, typename T12, typename T13, typename T14, typename T15,
 489    typename T16, typename T17, typename T18, typename T19, typename T20,
 490    typename T21, typename T22, typename T23, typename T24, typename T25,
 491    typename T26, typename T27, typename T28, typename T29, typename T30,
 492    typename T31, typename T32, typename T33, typename T34, typename T35,
 493    typename T36, typename T37, typename T38>
 494struct Types38 {
 495  typedef T1 Head;
 496  typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 497      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 498      T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
 499};
 500
 501template <typename T1, typename T2, typename T3, typename T4, typename T5,
 502    typename T6, typename T7, typename T8, typename T9, typename T10,
 503    typename T11, typename T12, typename T13, typename T14, typename T15,
 504    typename T16, typename T17, typename T18, typename T19, typename T20,
 505    typename T21, typename T22, typename T23, typename T24, typename T25,
 506    typename T26, typename T27, typename T28, typename T29, typename T30,
 507    typename T31, typename T32, typename T33, typename T34, typename T35,
 508    typename T36, typename T37, typename T38, typename T39>
 509struct Types39 {
 510  typedef T1 Head;
 511  typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 512      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 513      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
 514};
 515
 516template <typename T1, typename T2, typename T3, typename T4, typename T5,
 517    typename T6, typename T7, typename T8, typename T9, typename T10,
 518    typename T11, typename T12, typename T13, typename T14, typename T15,
 519    typename T16, typename T17, typename T18, typename T19, typename T20,
 520    typename T21, typename T22, typename T23, typename T24, typename T25,
 521    typename T26, typename T27, typename T28, typename T29, typename T30,
 522    typename T31, typename T32, typename T33, typename T34, typename T35,
 523    typename T36, typename T37, typename T38, typename T39, typename T40>
 524struct Types40 {
 525  typedef T1 Head;
 526  typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 527      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 528      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
 529};
 530
 531template <typename T1, typename T2, typename T3, typename T4, typename T5,
 532    typename T6, typename T7, typename T8, typename T9, typename T10,
 533    typename T11, typename T12, typename T13, typename T14, typename T15,
 534    typename T16, typename T17, typename T18, typename T19, typename T20,
 535    typename T21, typename T22, typename T23, typename T24, typename T25,
 536    typename T26, typename T27, typename T28, typename T29, typename T30,
 537    typename T31, typename T32, typename T33, typename T34, typename T35,
 538    typename T36, typename T37, typename T38, typename T39, typename T40,
 539    typename T41>
 540struct Types41 {
 541  typedef T1 Head;
 542  typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 543      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 544      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
 545};
 546
 547template <typename T1, typename T2, typename T3, typename T4, typename T5,
 548    typename T6, typename T7, typename T8, typename T9, typename T10,
 549    typename T11, typename T12, typename T13, typename T14, typename T15,
 550    typename T16, typename T17, typename T18, typename T19, typename T20,
 551    typename T21, typename T22, typename T23, typename T24, typename T25,
 552    typename T26, typename T27, typename T28, typename T29, typename T30,
 553    typename T31, typename T32, typename T33, typename T34, typename T35,
 554    typename T36, typename T37, typename T38, typename T39, typename T40,
 555    typename T41, typename T42>
 556struct Types42 {
 557  typedef T1 Head;
 558  typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 559      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 560      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
 561};
 562
 563template <typename T1, typename T2, typename T3, typename T4, typename T5,
 564    typename T6, typename T7, typename T8, typename T9, typename T10,
 565    typename T11, typename T12, typename T13, typename T14, typename T15,
 566    typename T16, typename T17, typename T18, typename T19, typename T20,
 567    typename T21, typename T22, typename T23, typename T24, typename T25,
 568    typename T26, typename T27, typename T28, typename T29, typename T30,
 569    typename T31, typename T32, typename T33, typename T34, typename T35,
 570    typename T36, typename T37, typename T38, typename T39, typename T40,
 571    typename T41, typename T42, typename T43>
 572struct Types43 {
 573  typedef T1 Head;
 574  typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 575      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 576      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
 577      T43> Tail;
 578};
 579
 580template <typename T1, typename T2, typename T3, typename T4, typename T5,
 581    typename T6, typename T7, typename T8, typename T9, typename T10,
 582    typename T11, typename T12, typename T13, typename T14, typename T15,
 583    typename T16, typename T17, typename T18, typename T19, typename T20,
 584    typename T21, typename T22, typename T23, typename T24, typename T25,
 585    typename T26, typename T27, typename T28, typename T29, typename T30,
 586    typename T31, typename T32, typename T33, typename T34, typename T35,
 587    typename T36, typename T37, typename T38, typename T39, typename T40,
 588    typename T41, typename T42, typename T43, typename T44>
 589struct Types44 {
 590  typedef T1 Head;
 591  typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 592      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 593      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 594      T44> Tail;
 595};
 596
 597template <typename T1, typename T2, typename T3, typename T4, typename T5,
 598    typename T6, typename T7, typename T8, typename T9, typename T10,
 599    typename T11, typename T12, typename T13, typename T14, typename T15,
 600    typename T16, typename T17, typename T18, typename T19, typename T20,
 601    typename T21, typename T22, typename T23, typename T24, typename T25,
 602    typename T26, typename T27, typename T28, typename T29, typename T30,
 603    typename T31, typename T32, typename T33, typename T34, typename T35,
 604    typename T36, typename T37, typename T38, typename T39, typename T40,
 605    typename T41, typename T42, typename T43, typename T44, typename T45>
 606struct Types45 {
 607  typedef T1 Head;
 608  typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 609      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 610      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 611      T44, T45> Tail;
 612};
 613
 614template <typename T1, typename T2, typename T3, typename T4, typename T5,
 615    typename T6, typename T7, typename T8, typename T9, typename T10,
 616    typename T11, typename T12, typename T13, typename T14, typename T15,
 617    typename T16, typename T17, typename T18, typename T19, typename T20,
 618    typename T21, typename T22, typename T23, typename T24, typename T25,
 619    typename T26, typename T27, typename T28, typename T29, typename T30,
 620    typename T31, typename T32, typename T33, typename T34, typename T35,
 621    typename T36, typename T37, typename T38, typename T39, typename T40,
 622    typename T41, typename T42, typename T43, typename T44, typename T45,
 623    typename T46>
 624struct Types46 {
 625  typedef T1 Head;
 626  typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 627      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 628      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 629      T44, T45, T46> Tail;
 630};
 631
 632template <typename T1, typename T2, typename T3, typename T4, typename T5,
 633    typename T6, typename T7, typename T8, typename T9, typename T10,
 634    typename T11, typename T12, typename T13, typename T14, typename T15,
 635    typename T16, typename T17, typename T18, typename T19, typename T20,
 636    typename T21, typename T22, typename T23, typename T24, typename T25,
 637    typename T26, typename T27, typename T28, typename T29, typename T30,
 638    typename T31, typename T32, typename T33, typename T34, typename T35,
 639    typename T36, typename T37, typename T38, typename T39, typename T40,
 640    typename T41, typename T42, typename T43, typename T44, typename T45,
 641    typename T46, typename T47>
 642struct Types47 {
 643  typedef T1 Head;
 644  typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 645      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 646      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 647      T44, T45, T46, T47> Tail;
 648};
 649
 650template <typename T1, typename T2, typename T3, typename T4, typename T5,
 651    typename T6, typename T7, typename T8, typename T9, typename T10,
 652    typename T11, typename T12, typename T13, typename T14, typename T15,
 653    typename T16, typename T17, typename T18, typename T19, typename T20,
 654    typename T21, typename T22, typename T23, typename T24, typename T25,
 655    typename T26, typename T27, typename T28, typename T29, typename T30,
 656    typename T31, typename T32, typename T33, typename T34, typename T35,
 657    typename T36, typename T37, typename T38, typename T39, typename T40,
 658    typename T41, typename T42, typename T43, typename T44, typename T45,
 659    typename T46, typename T47, typename T48>
 660struct Types48 {
 661  typedef T1 Head;
 662  typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 663      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 664      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 665      T44, T45, T46, T47, T48> Tail;
 666};
 667
 668template <typename T1, typename T2, typename T3, typename T4, typename T5,
 669    typename T6, typename T7, typename T8, typename T9, typename T10,
 670    typename T11, typename T12, typename T13, typename T14, typename T15,
 671    typename T16, typename T17, typename T18, typename T19, typename T20,
 672    typename T21, typename T22, typename T23, typename T24, typename T25,
 673    typename T26, typename T27, typename T28, typename T29, typename T30,
 674    typename T31, typename T32, typename T33, typename T34, typename T35,
 675    typename T36, typename T37, typename T38, typename T39, typename T40,
 676    typename T41, typename T42, typename T43, typename T44, typename T45,
 677    typename T46, typename T47, typename T48, typename T49>
 678struct Types49 {
 679  typedef T1 Head;
 680  typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 681      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 682      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 683      T44, T45, T46, T47, T48, T49> Tail;
 684};
 685
 686template <typename T1, typename T2, typename T3, typename T4, typename T5,
 687    typename T6, typename T7, typename T8, typename T9, typename T10,
 688    typename T11, typename T12, typename T13, typename T14, typename T15,
 689    typename T16, typename T17, typename T18, typename T19, typename T20,
 690    typename T21, typename T22, typename T23, typename T24, typename T25,
 691    typename T26, typename T27, typename T28, typename T29, typename T30,
 692    typename T31, typename T32, typename T33, typename T34, typename T35,
 693    typename T36, typename T37, typename T38, typename T39, typename T40,
 694    typename T41, typename T42, typename T43, typename T44, typename T45,
 695    typename T46, typename T47, typename T48, typename T49, typename T50>
 696struct Types50 {
 697  typedef T1 Head;
 698  typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 699      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
 700      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
 701      T44, T45, T46, T47, T48, T49, T50> Tail;
 702};
 703
 704
 705}  // namespace internal
 706
 707// We don't want to require the users to write TypesN<...> directly,
 708// as that would require them to count the length.  Types<...> is much
 709// easier to write, but generates horrible messages when there is a
 710// compiler error, as gcc insists on printing out each template
 711// argument, even if it has the default value (this means Types<int>
 712// will appear as Types<int, None, None, ..., None> in the compiler
 713// errors).
 714//
 715// Our solution is to combine the best part of the two approaches: a
 716// user would write Types<T1, ..., TN>, and Google Test will translate
 717// that to TypesN<T1, ..., TN> internally to make error messages
 718// readable.  The translation is done by the 'type' member of the
 719// Types template.
 720template <typename T1 = internal::None, typename T2 = internal::None,
 721    typename T3 = internal::None, typename T4 = internal::None,
 722    typename T5 = internal::None, typename T6 = internal::None,
 723    typename T7 = internal::None, typename T8 = internal::None,
 724    typename T9 = internal::None, typename T10 = internal::None,
 725    typename T11 = internal::None, typename T12 = internal::None,
 726    typename T13 = internal::None, typename T14 = internal::None,
 727    typename T15 = internal::None, typename T16 = internal::None,
 728    typename T17 = internal::None, typename T18 = internal::None,
 729    typename T19 = internal::None, typename T20 = internal::None,
 730    typename T21 = internal::None, typename T22 = internal::None,
 731    typename T23 = internal::None, typename T24 = internal::None,
 732    typename T25 = internal::None, typename T26 = internal::None,
 733    typename T27 = internal::None, typename T28 = internal::None,
 734    typename T29 = internal::None, typename T30 = internal::None,
 735    typename T31 = internal::None, typename T32 = internal::None,
 736    typename T33 = internal::None, typename T34 = internal::None,
 737    typename T35 = internal::None, typename T36 = internal::None,
 738    typename T37 = internal::None, typename T38 = internal::None,
 739    typename T39 = internal::None, typename T40 = internal::None,
 740    typename T41 = internal::None, typename T42 = internal::None,
 741    typename T43 = internal::None, typename T44 = internal::None,
 742    typename T45 = internal::None, typename T46 = internal::None,
 743    typename T47 = internal::None, typename T48 = internal::None,
 744    typename T49 = internal::None, typename T50 = internal::None>
 745struct Types {
 746  typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 747      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
 748      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
 749      T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
 750};
 751
 752template <>
 753struct Types<internal::None, internal::None, internal::None, internal::None,
 754    internal::None, internal::None, internal::None, internal::None,
 755    internal::None, internal::None, internal::None, internal::None,
 756    internal::None, internal::None, internal::None, internal::None,
 757    internal::None, internal::None, internal::None, internal::None,
 758    internal::None, internal::None, internal::None, internal::None,
 759    internal::None, internal::None, internal::None, internal::None,
 760    internal::None, internal::None, internal::None, internal::None,
 761    internal::None, internal::None, internal::None, internal::None,
 762    internal::None, internal::None, internal::None, internal::None,
 763    internal::None, internal::None, internal::None, internal::None,
 764    internal::None, internal::None, internal::None, internal::None,
 765    internal::None, internal::None> {
 766  typedef internal::Types0 type;
 767};
 768template <typename T1>
 769struct Types<T1, internal::None, internal::None, internal::None,
 770    internal::None, internal::None, internal::None, internal::None,
 771    internal::None, internal::None, internal::None, internal::None,
 772    internal::None, internal::None, internal::None, internal::None,
 773    internal::None, internal::None, internal::None, internal::None,
 774    internal::None, internal::None, internal::None, internal::None,
 775    internal::None, internal::None, internal::None, internal::None,
 776    internal::None, internal::None, internal::None, internal::None,
 777    internal::None, internal::None, internal::None, internal::None,
 778    internal::None, internal::None, internal::None, internal::None,
 779    internal::None, internal::None, internal::None, internal::None,
 780    internal::None, internal::None, internal::None, internal::None,
 781    internal::None, internal::None> {
 782  typedef internal::Types1<T1> type;
 783};
 784template <typename T1, typename T2>
 785struct Types<T1, T2, internal::None, internal::None, internal::None,
 786    internal::None, internal::None, internal::None, internal::None,
 787    internal::None, internal::None, internal::None, internal::None,
 788    internal::None, internal::None, internal::None, internal::None,
 789    internal::None, internal::None, internal::None, internal::None,
 790    internal::None, internal::None, internal::None, internal::None,
 791    internal::None, internal::None, internal::None, internal::None,
 792    internal::None, internal::None, internal::None, internal::None,
 793    internal::None, internal::None, internal::None, internal::None,
 794    internal::None, internal::None, internal::None, internal::None,
 795    internal::None, internal::None, internal::None, internal::None,
 796    internal::None, internal::None, internal::None, internal::None,
 797    internal::None> {
 798  typedef internal::Types2<T1, T2> type;
 799};
 800template <typename T1, typename T2, typename T3>
 801struct Types<T1, T2, T3, internal::None, internal::None, internal::None,
 802    internal::None, internal::None, internal::None, internal::None,
 803    internal::None, internal::None, internal::None, internal::None,
 804    internal::None, internal::None, internal::None, internal::None,
 805    internal::None, internal::None, internal::None, internal::None,
 806    internal::None, internal::None, internal::None, internal::None,
 807    internal::None, internal::None, internal::None, internal::None,
 808    internal::None, internal::None, internal::None, internal::None,
 809    internal::None, internal::None, internal::None, internal::None,
 810    internal::None, internal::None, internal::None, internal::None,
 811    internal::None, internal::None, internal::None, internal::None,
 812    internal::None, internal::None, internal::None, internal::None> {
 813  typedef internal::Types3<T1, T2, T3> type;
 814};
 815template <typename T1, typename T2, typename T3, typename T4>
 816struct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None,
 817    internal::None, internal::None, internal::None, internal::None,
 818    internal::None, internal::None, internal::None, internal::None,
 819    internal::None, internal::None, internal::None, internal::None,
 820    internal::None, internal::None, internal::None, internal::None,
 821    internal::None, internal::None, internal::None, internal::None,
 822    internal::None, internal::None, internal::None, internal::None,
 823    internal::None, internal::None, internal::None, internal::None,
 824    internal::None, internal::None, internal::None, internal::None,
 825    internal::None, internal::None, internal::None, internal::None,
 826    internal::None, internal::None, internal::None, internal::None,
 827    internal::None, internal::None, internal::None> {
 828  typedef internal::Types4<T1, T2, T3, T4> type;
 829};
 830template <typename T1, typename T2, typename T3, typename T4, typename T5>
 831struct Types<T1, T2, T3, T4, T5, internal::None, internal::None,
 832    internal::None, internal::None, internal::None, internal::None,
 833    internal::None, internal::None, internal::None, internal::None,
 834    internal::None, internal::None, internal::None, internal::None,
 835    internal::None, internal::None, internal::None, internal::None,
 836    internal::None, internal::None, internal::None, internal::None,
 837    internal::None, internal::None, internal::None, internal::None,
 838    internal::None, internal::None, internal::None, internal::None,
 839    internal::None, internal::None, internal::None, internal::None,
 840    internal::None, internal::None, internal::None, internal::None,
 841    internal::None, internal::None, internal::None, internal::None,
 842    internal::None, internal::None, internal::None> {
 843  typedef internal::Types5<T1, T2, T3, T4, T5> type;
 844};
 845template <typename T1, typename T2, typename T3, typename T4, typename T5,
 846    typename T6>
 847struct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,
 848    internal::None, internal::None, internal::None, internal::None,
 849    internal::None, internal::None, internal::None, internal::None,
 850    internal::None, internal::None, internal::None, internal::None,
 851    internal::None, internal::None, internal::None, internal::None,
 852    internal::None, internal::None, internal::None, internal::None,
 853    internal::None, internal::None, internal::None, internal::None,
 854    internal::None, internal::None, internal::None, internal::None,
 855    internal::None, internal::None, internal::None, internal::None,
 856    internal::None, internal::None, internal::None, internal::None,
 857    internal::None, internal::None, internal::None, internal::None,
 858    internal::None, internal::None> {
 859  typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
 860};
 861template <typename T1, typename T2, typename T3, typename T4, typename T5,
 862    typename T6, typename T7>
 863struct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,
 864    internal::None, internal::None, internal::None, internal::None,
 865    internal::None, internal::None, internal::None, internal::None,
 866    internal::None, internal::None, internal::None, internal::None,
 867    internal::None, internal::None, internal::None, internal::None,
 868    internal::None, internal::None, internal::None, internal::None,
 869    internal::None, internal::None, internal::None, internal::None,
 870    internal::None, internal::None, internal::None, internal::None,
 871    internal::None, internal::None, internal::None, internal::None,
 872    internal::None, internal::None, internal::None, internal::None,
 873    internal::None, internal::None, internal::None, internal::None,
 874    internal::None> {
 875  typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
 876};
 877template <typename T1, typename T2, typename T3, typename T4, typename T5,
 878    typename T6, typename T7, typename T8>
 879struct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,
 880    internal::None, internal::None, internal::None, internal::None,
 881    internal::None, internal::None, internal::None, internal::None,
 882    internal::None, internal::None, internal::None, internal::None,
 883    internal::None, internal::None, internal::None, internal::None,
 884    internal::None, internal::None, internal::None, internal::None,
 885    internal::None, internal::None, internal::None, internal::None,
 886    internal::None, internal::None, internal::None, internal::None,
 887    internal::None, internal::None, internal::None, internal::None,
 888    internal::None, internal::None, internal::None, internal::None,
 889    internal::None, internal::None, internal::None, internal::None> {
 890  typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
 891};
 892template <typename T1, typename T2, typename T3, typename T4, typename T5,
 893    typename T6, typename T7, typename T8, typename T9>
 894struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,
 895    internal::None, internal::None, internal::None, internal::None,
 896    internal::None, internal::None, internal::None, internal::None,
 897    internal::None, internal::None, internal::None, internal::None,
 898    internal::None, internal::None, internal::None, internal::None,
 899    internal::None, internal::None, internal::None, internal::None,
 900    internal::None, internal::None, internal::None, internal::None,
 901    internal::None, internal::None, internal::None, internal::None,
 902    internal::None, internal::None, internal::None, internal::None,
 903    internal::None, internal::None, internal::None, internal::None,
 904    internal::None, internal::None, internal::None, internal::None> {
 905  typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
 906};
 907template <typename T1, typename T2, typename T3, typename T4, typename T5,
 908    typename T6, typename T7, typename T8, typename T9, typename T10>
 909struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,
 910    internal::None, internal::None, internal::None, internal::None,
 911    internal::None, internal::None, internal::None, internal::None,
 912    internal::None, internal::None, internal::None, internal::None,
 913    internal::None, internal::None, internal::None, internal::None,
 914    internal::None, internal::None, internal::None, internal::None,
 915    internal::None, internal::None, internal::None, internal::None,
 916    internal::None, internal::None, internal::None, internal::None,
 917    internal::None, internal::None, internal::None, internal::None,
 918    internal::None, internal::None, internal::None, internal::None,
 919    internal::None, internal::None, internal::None> {
 920  typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
 921};
 922template <typename T1, typename T2, typename T3, typename T4, typename T5,
 923    typename T6, typename T7, typename T8, typename T9, typename T10,
 924    typename T11>
 925struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,
 926    internal::None, internal::None, internal::None, internal::None,
 927    internal::None, internal::None, internal::None, internal::None,
 928    internal::None, internal::None, internal::None, internal::None,
 929    internal::None, internal::None, internal::None, internal::None,
 930    internal::None, internal::None, internal::None, internal::None,
 931    internal::None, internal::None, internal::None, internal::None,
 932    internal::None, internal::None, internal::None, internal::None,
 933    internal::None, internal::None, internal::None, internal::None,
 934    internal::None, internal::None, internal::None, internal::None,
 935    internal::None, internal::None> {
 936  typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
 937};
 938template <typename T1, typename T2, typename T3, typename T4, typename T5,
 939    typename T6, typename T7, typename T8, typename T9, typename T10,
 940    typename T11, typename T12>
 941struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,
 942    internal::None, internal::None, internal::None, internal::None,
 943    internal::None, internal::None, internal::None, internal::None,
 944    internal::None, internal::None, internal::None, internal::None,
 945    internal::None, internal::None, internal::None, internal::None,
 946    internal::None, internal::None, internal::None, internal::None,
 947    internal::None, internal::None, internal::None, internal::None,
 948    internal::None, internal::None, internal::None, internal::None,
 949    internal::None, internal::None, internal::None, internal::None,
 950    internal::None, internal::None, internal::None, internal::None,
 951    internal::None> {
 952  typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
 953      T12> type;
 954};
 955template <typename T1, typename T2, typename T3, typename T4, typename T5,
 956    typename T6, typename T7, typename T8, typename T9, typename T10,
 957    typename T11, typename T12, typename T13>
 958struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
 959    internal::None, internal::None, internal::None, internal::None,
 960    internal::None, internal::None, internal::None, internal::None,
 961    internal::None, internal::None, internal::None, internal::None,
 962    internal::None, internal::None, internal::None, internal::None,
 963    internal::None, internal::None, internal::None, internal::None,
 964    internal::None, internal::None, internal::None, internal::None,
 965    internal::None, internal::None, internal::None, internal::None,
 966    internal::None, internal::None, internal::None, internal::None,
 967    internal::None, internal::None, internal::None, internal::None,
 968    internal::None> {
 969  typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 970      T13> type;
 971};
 972template <typename T1, typename T2, typename T3, typename T4, typename T5,
 973    typename T6, typename T7, typename T8, typename T9, typename T10,
 974    typename T11, typename T12, typename T13, typename T14>
 975struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
 976    internal::None, internal::None, internal::None, internal::None,
 977    internal::None, internal::None, internal::None, internal::None,
 978    internal::None, internal::None, internal::None, internal::None,
 979    internal::None, internal::None, internal::None, internal::None,
 980    internal::None, internal::None, internal::None, internal::None,
 981    internal::None, internal::None, internal::None, internal::None,
 982    internal::None, internal::None, internal::None, internal::None,
 983    internal::None, internal::None, internal::None, internal::None,
 984    internal::None, internal::None, internal::None, internal::None> {
 985  typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
 986      T13, T14> type;
 987};
 988template <typename T1, typename T2, typename T3, typename T4, typename T5,
 989    typename T6, typename T7, typename T8, typename T9, typename T10,
 990    typename T11, typename T12, typename T13, typename T14, typename T15>
 991struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
 992    internal::None, internal::None, internal::None, internal::None,
 993    internal::None, internal::None, internal::None, internal::None,
 994    internal::None, internal::None, internal::None, internal::None,
 995    internal::None, internal::None, internal::None, internal::None,
 996    internal::None, internal::None, internal::None, internal::None,
 997    internal::None, internal::None, internal::None, internal::None,
 998    internal::None, internal::None, internal::None, internal::None,
 999    internal::None, internal::None, internal::None, internal::None,
1000  

Large files files are truncated, but you can click here to view the full file