1aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This file was GENERATED by command:
2aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//     pump.py gtest-param-util-generated.h.pump
3aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// DO NOT EDIT BY HAND!!!
4aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Copyright 2008 Google Inc.
6aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// All Rights Reserved.
7aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
8aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Redistribution and use in source and binary forms, with or without
9aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// modification, are permitted provided that the following conditions are
10aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// met:
11aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
12aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//     * Redistributions of source code must retain the above copyright
13aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// notice, this list of conditions and the following disclaimer.
14aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//     * Redistributions in binary form must reproduce the above
15aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// copyright notice, this list of conditions and the following disclaimer
16aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// in the documentation and/or other materials provided with the
17aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// distribution.
18aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//     * Neither the name of Google Inc. nor the names of its
19aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// contributors may be used to endorse or promote products derived from
20aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// this software without specific prior written permission.
21aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
22aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
34aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Author: vladl@google.com (Vlad Losev)
35aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
36aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Type and function utilities for implementing parameterized tests.
37aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
38aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
39aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Currently Google Test supports at most 50 arguments in Values,
40aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// and at most 10 arguments in Combine. Please contact
41aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// googletestframework@googlegroups.com if you need more.
42aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Please note that the number of arguments to Combine is limited
43aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// by the maximum arity of the implementation of tr1::tuple which is
44aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// currently set at 10.
45aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
46aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
47aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
48aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
49aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// scripts/fuse_gtest.py depends on gtest's own header being #included
50aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// *unconditionally*.  Therefore these #includes cannot be moved
51aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// inside #if GTEST_HAS_PARAM_TEST.
52aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include "gtest/internal/gtest-param-util.h"
53aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include "gtest/internal/gtest-port.h"
54aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
55aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#if GTEST_HAS_PARAM_TEST
56aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
57aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace testing {
58aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
59aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Forward declarations of ValuesIn(), which is implemented in
60aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// include/gtest/gtest-param-test.h.
61aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename ForwardIterator>
62aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterinternal::ParamGenerator<
63aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
64aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterValuesIn(ForwardIterator begin, ForwardIterator end);
65aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
66aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T, size_t N>
67aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterinternal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
68aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
69aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <class Container>
70aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterinternal::ParamGenerator<typename Container::value_type> ValuesIn(
71aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Container& container);
72aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
73aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchternamespace internal {
74aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
75aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Used in the Values() function to provide polymorphic capabilities.
76aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1>
77aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray1 {
78aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
79aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  explicit ValueArray1(T1 v1) : v1_(v1) {}
80aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
81aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
82aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
83aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
84aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
85aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
86aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray1& other);
87aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
88aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
89aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
90aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
91aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2>
92aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray2 {
93aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
94aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
95aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
96aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
97aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
98aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)};
99aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray2& other);
105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3>
111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray3 {
112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_)};
119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray3& other);
125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4>
132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray4 {
133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v4_(v4) {}
136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_)};
141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray4& other);
147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5>
155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray5 {
156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v4_(v4), v5_(v5) {}
159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)};
164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray5& other);
170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6>
180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray6 {
181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_)};
190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray6& other);
196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7>
207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray7 {
208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_)};
217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray7& other);
223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8>
235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray8 {
236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8) {}
240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)};
246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray8& other);
252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9>
265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray9 {
266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9) {}
270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_)};
277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray9& other);
283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10>
297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray10 {
298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10) {}
302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_)};
309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray10& other);
315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11>
331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray11 {
332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)};
343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray11& other);
349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12>
366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray12 {
367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_)};
379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray12& other);
385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13>
403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray13 {
404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v12_(v12), v13_(v13) {}
409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_)};
417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray13& other);
423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14>
442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray14 {
443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)};
456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray14& other);
462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15>
482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray15 {
483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_)};
497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray15& other);
503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16>
525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray16 {
526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v16_(v16) {}
532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_)};
541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray16& other);
547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17>
570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray17 {
571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v15_(v15), v16_(v16), v17_(v17) {}
577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)};
586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray17& other);
592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18>
616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray18 {
617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_)};
633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray18& other);
639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19>
664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray19 {
665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_)};
681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray19& other);
687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20>
713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray20 {
714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v19_(v19), v20_(v20) {}
721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)};
731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray20& other);
737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21>
765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray21 {
766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_)};
784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray21& other);
790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22>
819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray22 {
820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_)};
838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray22& other);
844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23>
874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray23 {
875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v23_(v23) {}
883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)};
894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray23& other);
900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24>
931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray24 {
932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v22_(v22), v23_(v23), v24_(v24) {}
940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_)};
952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray24& other);
958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25>
990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray25 {
991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_)};
1011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray25& other);
1017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26>
1051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray26 {
1052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
1060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)};
1072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray26& other);
1078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27>
1113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray27 {
1114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v26_(v26), v27_(v27) {}
1123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_)};
1136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray27& other);
1142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28>
1178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray28 {
1179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
1188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_)};
1201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray28& other);
1207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29>
1244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray29 {
1245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
1254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)};
1267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray29& other);
1273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
1303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30>
1311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray30 {
1312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
1317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v29_(v29), v30_(v30) {}
1322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_)};
1336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray30& other);
1342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
1372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
1373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
1381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31>
1382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray31 {
1383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
1388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v29_(v29), v30_(v30), v31_(v31) {}
1393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_)};
1407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray31& other);
1413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
1443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
1444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
1445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
1453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32>
1454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray32 {
1455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
1460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
1465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)};
1479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray32& other);
1485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
1515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
1516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
1517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
1518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
1526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33>
1527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray33 {
1528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
1533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v33_(v33) {}
1539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_)};
1554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray33& other);
1560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
1590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
1591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
1592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
1593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
1594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
1602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34>
1603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray34 {
1604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v33_(v33), v34_(v34) {}
1615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_)};
1630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray34& other);
1636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
1666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
1667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
1668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
1669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
1670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
1671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
1679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35>
1680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray35 {
1681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
1691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
1692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)};
1707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray35& other);
1713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
1743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
1744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
1745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
1746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
1747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
1748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
1749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
1757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
1758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36>
1759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray36 {
1760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
1770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
1771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
1786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_)};
1787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray36& other);
1793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
1823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
1824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
1825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
1826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
1827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
1828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
1829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
1830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
1838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
1839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37>
1840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray37 {
1841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
1851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
1852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v36_(v36), v37_(v37) {}
1853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
1868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_)};
1869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray37& other);
1875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
1905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
1906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
1907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
1908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
1909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
1910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
1911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
1912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
1913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
1916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
1917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
1918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
1919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
1920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
1921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
1922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38>
1923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray38 {
1924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
1925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
1930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
1936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
1938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
1939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
1940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
1941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
1942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
1943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
1944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
1945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
1946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
1947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
1948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
1949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
1950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
1951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)};
1952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
1953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
1954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
1956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
1957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray38& other);
1958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
1960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
1961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
1962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
1963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
1964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
1965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
1966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
1967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
1968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
1969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
1970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
1971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
1972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
1973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
1974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
1975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
1976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
1977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
1978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
1979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
1980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
1981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
1982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
1983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
1984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
1985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
1986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
1987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
1988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
1989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
1990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
1991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
1992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
1993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
1994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
1995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
1996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
1997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
1998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
1999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39>
2007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray39 {
2008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
2014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
2020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_)};
2037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray39& other);
2043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
2048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
2049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
2050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
2051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
2052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
2053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
2054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
2055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
2056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
2057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
2058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
2059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
2060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
2061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
2062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
2063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
2064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
2065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
2066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
2067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
2068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
2069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
2070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
2071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
2072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
2073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
2074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
2075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
2076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
2077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
2078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
2079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
2080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
2081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
2082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
2083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
2084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40>
2093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray40 {
2094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
2100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v40_(v40) {}
2107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_)};
2124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray40& other);
2130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
2135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
2136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
2137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
2138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
2139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
2140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
2141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
2142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
2143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
2144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
2145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
2146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
2147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
2148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
2149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
2150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
2151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
2152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
2153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
2154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
2155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
2156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
2157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
2158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
2159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
2160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
2161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
2162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
2163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
2164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
2165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
2166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
2167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
2168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
2169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
2170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
2171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
2172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40,
2181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T41>
2182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray41 {
2183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
2189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v39_(v39), v40_(v40), v41_(v41) {}
2196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)};
2213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray41& other);
2219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
2224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
2225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
2226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
2227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
2228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
2229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
2230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
2231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
2232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
2233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
2234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
2235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
2236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
2237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
2238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
2239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
2240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
2241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
2242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
2243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
2244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
2245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
2246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
2247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
2248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
2249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
2250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
2251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
2252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
2253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
2254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
2255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
2256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
2257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
2258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
2259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
2260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T41 v41_;
2261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
2262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40,
2271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T41, typename T42>
2272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray42 {
2273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
2286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v42_)};
2304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray42& other);
2310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
2315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
2316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
2317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
2318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
2319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
2320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
2321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
2322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
2323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
2324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
2325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
2326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
2327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
2328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
2329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
2330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
2331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
2332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
2333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
2334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
2335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
2336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
2337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
2338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
2339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
2340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
2341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
2342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
2343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
2344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
2345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
2346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
2347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
2348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
2349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
2350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
2351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T41 v41_;
2352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T42 v42_;
2353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
2354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40,
2363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T41, typename T42, typename T43>
2364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray43 {
2365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
2372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
2373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
2374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
2375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
2376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
2377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
2378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v42_), static_cast<T>(v43_)};
2396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray43& other);
2402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
2407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
2408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
2409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
2410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
2411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
2412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
2413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
2414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
2415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
2416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
2417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
2418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
2419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
2420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
2421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
2422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
2423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
2424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
2425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
2426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
2427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
2428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
2429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
2430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
2431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
2432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
2433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
2434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
2435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
2436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
2437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
2438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
2439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
2440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
2441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
2442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
2443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T41 v41_;
2444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T42 v42_;
2445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T43 v43_;
2446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
2447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40,
2456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T41, typename T42, typename T43, typename T44>
2457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray44 {
2458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
2465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
2466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
2467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
2468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
2469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
2470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
2471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v43_(v43), v44_(v44) {}
2472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)};
2490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray44& other);
2496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
2501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
2502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
2503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
2504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
2505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
2506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
2507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
2508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
2509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
2510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
2511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
2512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
2513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
2514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
2515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
2516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
2517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
2518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
2519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
2520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
2521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
2522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
2523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
2524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
2525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
2526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
2527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
2528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
2529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
2530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
2531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
2532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
2533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
2534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
2535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
2536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
2537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T41 v41_;
2538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T42 v42_;
2539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T43 v43_;
2540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T44 v44_;
2541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
2542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40,
2551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T41, typename T42, typename T43, typename T44, typename T45>
2552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray45 {
2553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
2560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
2561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
2562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
2563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
2564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
2565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
2566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
2567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v45_)};
2586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray45& other);
2592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
2597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
2598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
2599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
2600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
2601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
2602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
2603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
2604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
2605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
2606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
2607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
2608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
2609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
2610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
2611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
2612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
2613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
2614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
2615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
2616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
2617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
2618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
2619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
2620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
2621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
2622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
2623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
2624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
2625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
2626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
2627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
2628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
2629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
2630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
2631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
2632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
2633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T41 v41_;
2634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T42 v42_;
2635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T43 v43_;
2636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T44 v44_;
2637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T45 v45_;
2638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
2639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40,
2648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T41, typename T42, typename T43, typename T44, typename T45,
2649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T46>
2650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray46 {
2651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
2658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
2665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v45_), static_cast<T>(v46_)};
2684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray46& other);
2690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
2695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
2696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
2697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
2698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
2699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
2700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
2701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
2702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
2703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
2704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
2705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
2706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
2707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
2708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
2709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
2710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
2711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
2712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
2713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
2714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
2715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
2716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
2717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
2718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
2719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
2720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
2721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
2722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
2723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
2724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
2725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
2726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
2727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
2728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
2729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
2730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
2731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T41 v41_;
2732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T42 v42_;
2733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T43 v43_;
2734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T44 v44_;
2735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T45 v45_;
2736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T46 v46_;
2737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
2738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40,
2747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T41, typename T42, typename T43, typename T44, typename T45,
2748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T46, typename T47>
2749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray47 {
2750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
2757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
2764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v47_(v47) {}
2765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)};
2784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray47& other);
2790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
2795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
2796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
2797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
2798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
2799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
2800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
2801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
2802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
2803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
2804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
2805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
2806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
2807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
2808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
2809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
2810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
2811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
2812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
2813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
2814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
2815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
2816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
2817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
2818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
2819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
2820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
2821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
2822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
2823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
2824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
2825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
2826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
2827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
2828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
2829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
2830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
2831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T41 v41_;
2832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T42 v42_;
2833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T43 v43_;
2834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T44 v44_;
2835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T45 v45_;
2836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T46 v46_;
2837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T47 v47_;
2838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
2839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40,
2848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T41, typename T42, typename T43, typename T44, typename T45,
2849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T46, typename T47, typename T48>
2850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray48 {
2851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
2858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
2865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v46_(v46), v47_(v47), v48_(v48) {}
2866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
2885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v48_)};
2886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray48& other);
2892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
2897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
2898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
2899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
2900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
2901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
2902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
2903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
2904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
2905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
2906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
2907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
2908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
2909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
2910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
2911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
2912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
2913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
2914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
2915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
2916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
2917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
2918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
2919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
2920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
2921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
2922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
2923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
2924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
2925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
2926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
2927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
2928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
2929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
2930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
2931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
2932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
2933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T41 v41_;
2934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T42 v42_;
2935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T43 v43_;
2936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T44 v44_;
2937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T45 v45_;
2938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T46 v46_;
2939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T47 v47_;
2940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T48 v48_;
2941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
2942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
2944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
2945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
2946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
2947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
2948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
2949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
2950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40,
2951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T41, typename T42, typename T43, typename T44, typename T45,
2952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T46, typename T47, typename T48, typename T49>
2953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray49 {
2954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
2955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
2961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
2969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
2971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
2972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
2973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
2974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
2975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
2976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
2977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
2978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
2979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
2980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
2981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
2982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
2983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
2984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
2985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
2986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
2987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
2988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v48_), static_cast<T>(v49_)};
2989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
2990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
2991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
2993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
2994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray49& other);
2995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
2996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
2997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
2998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
2999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
3000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
3001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
3002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
3003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
3004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
3005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
3006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
3007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
3008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
3009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
3010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
3011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
3012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
3013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
3014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
3015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
3016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
3017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
3018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
3019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
3020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
3021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
3022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
3023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
3024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
3025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
3026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
3027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
3028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
3029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
3030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
3031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
3032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
3033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
3034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
3035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
3036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T41 v41_;
3037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T42 v42_;
3038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T43 v43_;
3039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T44 v44_;
3040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T45 v45_;
3041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T46 v46_;
3042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T47 v47_;
3043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T48 v48_;
3044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T49 v49_;
3045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
3046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10,
3049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T11, typename T12, typename T13, typename T14, typename T15,
3050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T16, typename T17, typename T18, typename T19, typename T20,
3051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T21, typename T22, typename T23, typename T24, typename T25,
3052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T26, typename T27, typename T28, typename T29, typename T30,
3053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T31, typename T32, typename T33, typename T34, typename T35,
3054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T36, typename T37, typename T38, typename T39, typename T40,
3055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T41, typename T42, typename T43, typename T44, typename T45,
3056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T46, typename T47, typename T48, typename T49, typename T50>
3057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass ValueArray50 {
3058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
3059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
3065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
3066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
3067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
3068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
3069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
3070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
3071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
3072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
3073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T>
3075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator<T>() const {
3076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
3092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)};
3093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ValuesIn(array);
3094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
3097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
3098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const ValueArray50& other);
3099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T1 v1_;
3101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T2 v2_;
3102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T3 v3_;
3103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T4 v4_;
3104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T5 v5_;
3105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T6 v6_;
3106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T7 v7_;
3107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T8 v8_;
3108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T9 v9_;
3109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T10 v10_;
3110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T11 v11_;
3111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T12 v12_;
3112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T13 v13_;
3113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T14 v14_;
3114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T15 v15_;
3115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T16 v16_;
3116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T17 v17_;
3117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T18 v18_;
3118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T19 v19_;
3119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T20 v20_;
3120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T21 v21_;
3121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T22 v22_;
3122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T23 v23_;
3123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T24 v24_;
3124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T25 v25_;
3125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T26 v26_;
3126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T27 v27_;
3127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T28 v28_;
3128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T29 v29_;
3129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T30 v30_;
3130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T31 v31_;
3131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T32 v32_;
3132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T33 v33_;
3133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T34 v34_;
3134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T35 v35_;
3135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T36 v36_;
3136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T37 v37_;
3137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T38 v38_;
3138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T39 v39_;
3139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T40 v40_;
3140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T41 v41_;
3141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T42 v42_;
3142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T43 v43_;
3143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T44 v44_;
3144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T45 v45_;
3145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T46 v46_;
3146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T47 v47_;
3147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T48 v48_;
3148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T49 v49_;
3149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const T50 v50_;
3150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
3151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# if GTEST_HAS_COMBINE
3153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
3154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
3155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Generates values from the Cartesian product of values produced
3156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// by the argument generators.
3157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
3158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2>
3159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductGenerator2
3160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > {
3161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
3162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  typedef ::std::tr1::tuple<T1, T2> ParamType;
3163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  CartesianProductGenerator2(const ParamGenerator<T1>& g1,
3165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2)
3166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2) {}
3167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ~CartesianProductGenerator2() {}
3168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* Begin() const {
3170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());
3171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* End() const {
3173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());
3174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
3177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  class Iterator : public ParamIteratorInterface<ParamType> {
3178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   public:
3179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const ParamGeneratorInterface<ParamType>* base,
3180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T1>& g1,
3181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T1>::iterator& current1,
3182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2,
3183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T2>::iterator& current2)
3184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(base),
3185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin2_(g2.begin()), end2_(g2.end()), current2_(current2)    {
3187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ~Iterator() {}
3190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return base_;
3193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // Advance should not be called on beyond-of-range iterators
3195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // so no component iterators must be beyond end of range, either.
3196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual void Advance() {
3197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      assert(!AtEnd());
3198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ++current2_;
3199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current2_ == end2_) {
3200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_ = begin2_;
3201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current1_;
3202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ParamIteratorInterface<ParamType>* Clone() const {
3206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return new Iterator(*this);
3207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamType* Current() const { return &current_value_; }
3209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // Having the same base generator guarantees that the other
3211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // iterator is of the same type and we can downcast.
3212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "The program attempted to compare iterators "
3214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "from different generators." << std::endl;
3215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const Iterator* typed_other =
3216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          CheckedDowncastToActualType<const Iterator>(&other);
3217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterators equal if they both point beyond their
3218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // respective ranges. That can happen in a variety of fashions,
3219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // so we have to consult AtEnd().
3220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return (AtEnd() && typed_other->AtEnd()) ||
3221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter         (
3222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == typed_other->current1_ &&
3223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == typed_other->current2_);
3224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   private:
3227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const Iterator& other)
3228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(other.base_),
3229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin1_(other.begin1_),
3230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end1_(other.end1_),
3231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current1_(other.current1_),
3232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin2_(other.begin2_),
3233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end2_(other.end2_),
3234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_(other.current2_) {
3235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void ComputeCurrentValue() {
3239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (!AtEnd())
3240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current_value_ = ParamType(*current1_, *current2_);
3241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    bool AtEnd() const {
3243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterator past the end of the range when either of the
3244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // component iterators has reached the end of its range.
3245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return
3246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == end1_ ||
3247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == end2_;
3248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // No implementation - assignment is unsupported.
3251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void operator=(const Iterator& other);
3252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const ParamGeneratorInterface<ParamType>* const base_;
3254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // current[i]_ is the actual traversing iterator.
3256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator begin1_;
3257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator end1_;
3258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T1>::iterator current1_;
3259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator begin2_;
3260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator end2_;
3261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T2>::iterator current2_;
3262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    ParamType current_value_;
3263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  };  // class CartesianProductGenerator2::Iterator
3264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
3266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductGenerator2& other);
3267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T1> g1_;
3269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T2> g2_;
3270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductGenerator2
3271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3>
3274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductGenerator3
3275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > {
3276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
3277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  typedef ::std::tr1::tuple<T1, T2, T3> ParamType;
3278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  CartesianProductGenerator3(const ParamGenerator<T1>& g1,
3280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)
3281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3) {}
3282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ~CartesianProductGenerator3() {}
3283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* Begin() const {
3285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g3_.begin());
3287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* End() const {
3289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
3290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
3293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  class Iterator : public ParamIteratorInterface<ParamType> {
3294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   public:
3295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const ParamGeneratorInterface<ParamType>* base,
3296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T1>& g1,
3297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T1>::iterator& current1,
3298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2,
3299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T2>::iterator& current2,
3300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T3>& g3,
3301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T3>::iterator& current3)
3302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(base),
3303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin3_(g3.begin()), end3_(g3.end()), current3_(current3)    {
3306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ~Iterator() {}
3309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return base_;
3312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // Advance should not be called on beyond-of-range iterators
3314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // so no component iterators must be beyond end of range, either.
3315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual void Advance() {
3316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      assert(!AtEnd());
3317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ++current3_;
3318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current3_ == end3_) {
3319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_ = begin3_;
3320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current2_;
3321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current2_ == end2_) {
3323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_ = begin2_;
3324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current1_;
3325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ParamIteratorInterface<ParamType>* Clone() const {
3329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return new Iterator(*this);
3330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamType* Current() const { return &current_value_; }
3332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // Having the same base generator guarantees that the other
3334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // iterator is of the same type and we can downcast.
3335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "The program attempted to compare iterators "
3337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "from different generators." << std::endl;
3338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const Iterator* typed_other =
3339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          CheckedDowncastToActualType<const Iterator>(&other);
3340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterators equal if they both point beyond their
3341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // respective ranges. That can happen in a variety of fashions,
3342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // so we have to consult AtEnd().
3343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return (AtEnd() && typed_other->AtEnd()) ||
3344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter         (
3345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == typed_other->current1_ &&
3346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == typed_other->current2_ &&
3347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == typed_other->current3_);
3348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   private:
3351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const Iterator& other)
3352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(other.base_),
3353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin1_(other.begin1_),
3354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end1_(other.end1_),
3355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current1_(other.current1_),
3356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin2_(other.begin2_),
3357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end2_(other.end2_),
3358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_(other.current2_),
3359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin3_(other.begin3_),
3360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end3_(other.end3_),
3361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_(other.current3_) {
3362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void ComputeCurrentValue() {
3366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (!AtEnd())
3367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current_value_ = ParamType(*current1_, *current2_, *current3_);
3368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    bool AtEnd() const {
3370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterator past the end of the range when either of the
3371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // component iterators has reached the end of its range.
3372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return
3373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == end1_ ||
3374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == end2_ ||
3375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == end3_;
3376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // No implementation - assignment is unsupported.
3379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void operator=(const Iterator& other);
3380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const ParamGeneratorInterface<ParamType>* const base_;
3382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // current[i]_ is the actual traversing iterator.
3384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator begin1_;
3385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator end1_;
3386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T1>::iterator current1_;
3387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator begin2_;
3388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator end2_;
3389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T2>::iterator current2_;
3390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator begin3_;
3391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator end3_;
3392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T3>::iterator current3_;
3393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    ParamType current_value_;
3394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  };  // class CartesianProductGenerator3::Iterator
3395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
3397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductGenerator3& other);
3398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T1> g1_;
3400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T2> g2_;
3401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T3> g3_;
3402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductGenerator3
3403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4>
3406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductGenerator4
3407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > {
3408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
3409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType;
3410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  CartesianProductGenerator4(const ParamGenerator<T1>& g1,
3412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4)
3414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
3415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ~CartesianProductGenerator4() {}
3416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* Begin() const {
3418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g3_.begin(), g4_, g4_.begin());
3420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* End() const {
3422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g4_, g4_.end());
3424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
3427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  class Iterator : public ParamIteratorInterface<ParamType> {
3428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   public:
3429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const ParamGeneratorInterface<ParamType>* base,
3430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T1>& g1,
3431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T1>::iterator& current1,
3432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2,
3433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T2>::iterator& current2,
3434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T3>& g3,
3435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T3>::iterator& current3,
3436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4,
3437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T4>::iterator& current4)
3438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(base),
3439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin4_(g4.begin()), end4_(g4.end()), current4_(current4)    {
3443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ~Iterator() {}
3446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return base_;
3449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // Advance should not be called on beyond-of-range iterators
3451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // so no component iterators must be beyond end of range, either.
3452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual void Advance() {
3453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      assert(!AtEnd());
3454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ++current4_;
3455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current4_ == end4_) {
3456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_ = begin4_;
3457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current3_;
3458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current3_ == end3_) {
3460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_ = begin3_;
3461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current2_;
3462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current2_ == end2_) {
3464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_ = begin2_;
3465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current1_;
3466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ParamIteratorInterface<ParamType>* Clone() const {
3470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return new Iterator(*this);
3471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamType* Current() const { return &current_value_; }
3473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // Having the same base generator guarantees that the other
3475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // iterator is of the same type and we can downcast.
3476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "The program attempted to compare iterators "
3478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "from different generators." << std::endl;
3479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const Iterator* typed_other =
3480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          CheckedDowncastToActualType<const Iterator>(&other);
3481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterators equal if they both point beyond their
3482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // respective ranges. That can happen in a variety of fashions,
3483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // so we have to consult AtEnd().
3484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return (AtEnd() && typed_other->AtEnd()) ||
3485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter         (
3486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == typed_other->current1_ &&
3487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == typed_other->current2_ &&
3488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == typed_other->current3_ &&
3489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == typed_other->current4_);
3490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   private:
3493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const Iterator& other)
3494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(other.base_),
3495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin1_(other.begin1_),
3496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end1_(other.end1_),
3497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current1_(other.current1_),
3498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin2_(other.begin2_),
3499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end2_(other.end2_),
3500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_(other.current2_),
3501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin3_(other.begin3_),
3502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end3_(other.end3_),
3503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_(other.current3_),
3504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin4_(other.begin4_),
3505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end4_(other.end4_),
3506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_(other.current4_) {
3507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void ComputeCurrentValue() {
3511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (!AtEnd())
3512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current_value_ = ParamType(*current1_, *current2_, *current3_,
3513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter            *current4_);
3514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    bool AtEnd() const {
3516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterator past the end of the range when either of the
3517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // component iterators has reached the end of its range.
3518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return
3519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == end1_ ||
3520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == end2_ ||
3521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == end3_ ||
3522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == end4_;
3523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // No implementation - assignment is unsupported.
3526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void operator=(const Iterator& other);
3527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const ParamGeneratorInterface<ParamType>* const base_;
3529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // current[i]_ is the actual traversing iterator.
3531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator begin1_;
3532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator end1_;
3533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T1>::iterator current1_;
3534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator begin2_;
3535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator end2_;
3536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T2>::iterator current2_;
3537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator begin3_;
3538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator end3_;
3539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T3>::iterator current3_;
3540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator begin4_;
3541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator end4_;
3542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T4>::iterator current4_;
3543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    ParamType current_value_;
3544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  };  // class CartesianProductGenerator4::Iterator
3545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
3547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductGenerator4& other);
3548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T1> g1_;
3550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T2> g2_;
3551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T3> g3_;
3552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T4> g4_;
3553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductGenerator4
3554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5>
3557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductGenerator5
3558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5> > {
3559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
3560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType;
3561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  CartesianProductGenerator5(const ParamGenerator<T1>& g1,
3563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)
3565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
3566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ~CartesianProductGenerator5() {}
3567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* Begin() const {
3569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
3571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* End() const {
3573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g4_, g4_.end(), g5_, g5_.end());
3575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
3578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  class Iterator : public ParamIteratorInterface<ParamType> {
3579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   public:
3580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const ParamGeneratorInterface<ParamType>* base,
3581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T1>& g1,
3582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T1>::iterator& current1,
3583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2,
3584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T2>::iterator& current2,
3585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T3>& g3,
3586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T3>::iterator& current3,
3587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4,
3588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T4>::iterator& current4,
3589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T5>& g5,
3590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T5>::iterator& current5)
3591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(base),
3592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin5_(g5.begin()), end5_(g5.end()), current5_(current5)    {
3597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ~Iterator() {}
3600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return base_;
3603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // Advance should not be called on beyond-of-range iterators
3605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // so no component iterators must be beyond end of range, either.
3606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual void Advance() {
3607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      assert(!AtEnd());
3608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ++current5_;
3609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current5_ == end5_) {
3610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_ = begin5_;
3611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current4_;
3612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current4_ == end4_) {
3614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_ = begin4_;
3615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current3_;
3616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current3_ == end3_) {
3618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_ = begin3_;
3619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current2_;
3620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current2_ == end2_) {
3622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_ = begin2_;
3623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current1_;
3624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ParamIteratorInterface<ParamType>* Clone() const {
3628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return new Iterator(*this);
3629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamType* Current() const { return &current_value_; }
3631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // Having the same base generator guarantees that the other
3633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // iterator is of the same type and we can downcast.
3634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "The program attempted to compare iterators "
3636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "from different generators." << std::endl;
3637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const Iterator* typed_other =
3638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          CheckedDowncastToActualType<const Iterator>(&other);
3639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterators equal if they both point beyond their
3640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // respective ranges. That can happen in a variety of fashions,
3641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // so we have to consult AtEnd().
3642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return (AtEnd() && typed_other->AtEnd()) ||
3643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter         (
3644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == typed_other->current1_ &&
3645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == typed_other->current2_ &&
3646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == typed_other->current3_ &&
3647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == typed_other->current4_ &&
3648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == typed_other->current5_);
3649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   private:
3652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const Iterator& other)
3653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(other.base_),
3654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin1_(other.begin1_),
3655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end1_(other.end1_),
3656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current1_(other.current1_),
3657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin2_(other.begin2_),
3658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end2_(other.end2_),
3659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_(other.current2_),
3660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin3_(other.begin3_),
3661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end3_(other.end3_),
3662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_(other.current3_),
3663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin4_(other.begin4_),
3664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end4_(other.end4_),
3665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_(other.current4_),
3666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin5_(other.begin5_),
3667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end5_(other.end5_),
3668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_(other.current5_) {
3669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void ComputeCurrentValue() {
3673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (!AtEnd())
3674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current_value_ = ParamType(*current1_, *current2_, *current3_,
3675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter            *current4_, *current5_);
3676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    bool AtEnd() const {
3678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterator past the end of the range when either of the
3679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // component iterators has reached the end of its range.
3680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return
3681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == end1_ ||
3682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == end2_ ||
3683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == end3_ ||
3684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == end4_ ||
3685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == end5_;
3686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // No implementation - assignment is unsupported.
3689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void operator=(const Iterator& other);
3690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const ParamGeneratorInterface<ParamType>* const base_;
3692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // current[i]_ is the actual traversing iterator.
3694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator begin1_;
3695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator end1_;
3696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T1>::iterator current1_;
3697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator begin2_;
3698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator end2_;
3699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T2>::iterator current2_;
3700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator begin3_;
3701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator end3_;
3702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T3>::iterator current3_;
3703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator begin4_;
3704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator end4_;
3705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T4>::iterator current4_;
3706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator begin5_;
3707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator end5_;
3708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T5>::iterator current5_;
3709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    ParamType current_value_;
3710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  };  // class CartesianProductGenerator5::Iterator
3711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
3713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductGenerator5& other);
3714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T1> g1_;
3716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T2> g2_;
3717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T3> g3_;
3718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T4> g4_;
3719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T5> g5_;
3720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductGenerator5
3721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6>
3725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductGenerator6
3726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5,
3727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        T6> > {
3728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
3729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType;
3730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  CartesianProductGenerator6(const ParamGenerator<T1>& g1,
3732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
3734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T6>& g6)
3735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
3736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ~CartesianProductGenerator6() {}
3737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* Begin() const {
3739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
3741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* End() const {
3743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
3745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
3748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  class Iterator : public ParamIteratorInterface<ParamType> {
3749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   public:
3750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const ParamGeneratorInterface<ParamType>* base,
3751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T1>& g1,
3752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T1>::iterator& current1,
3753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2,
3754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T2>::iterator& current2,
3755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T3>& g3,
3756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T3>::iterator& current3,
3757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4,
3758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T4>::iterator& current4,
3759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T5>& g5,
3760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T5>::iterator& current5,
3761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T6>& g6,
3762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T6>::iterator& current6)
3763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(base),
3764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin6_(g6.begin()), end6_(g6.end()), current6_(current6)    {
3770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ~Iterator() {}
3773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return base_;
3776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // Advance should not be called on beyond-of-range iterators
3778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // so no component iterators must be beyond end of range, either.
3779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual void Advance() {
3780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      assert(!AtEnd());
3781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ++current6_;
3782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current6_ == end6_) {
3783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current6_ = begin6_;
3784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current5_;
3785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current5_ == end5_) {
3787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_ = begin5_;
3788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current4_;
3789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current4_ == end4_) {
3791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_ = begin4_;
3792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current3_;
3793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current3_ == end3_) {
3795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_ = begin3_;
3796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current2_;
3797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current2_ == end2_) {
3799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_ = begin2_;
3800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current1_;
3801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ParamIteratorInterface<ParamType>* Clone() const {
3805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return new Iterator(*this);
3806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamType* Current() const { return &current_value_; }
3808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // Having the same base generator guarantees that the other
3810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // iterator is of the same type and we can downcast.
3811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "The program attempted to compare iterators "
3813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "from different generators." << std::endl;
3814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const Iterator* typed_other =
3815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          CheckedDowncastToActualType<const Iterator>(&other);
3816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterators equal if they both point beyond their
3817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // respective ranges. That can happen in a variety of fashions,
3818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // so we have to consult AtEnd().
3819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return (AtEnd() && typed_other->AtEnd()) ||
3820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter         (
3821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == typed_other->current1_ &&
3822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == typed_other->current2_ &&
3823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == typed_other->current3_ &&
3824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == typed_other->current4_ &&
3825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == typed_other->current5_ &&
3826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current6_ == typed_other->current6_);
3827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   private:
3830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const Iterator& other)
3831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(other.base_),
3832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin1_(other.begin1_),
3833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end1_(other.end1_),
3834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current1_(other.current1_),
3835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin2_(other.begin2_),
3836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end2_(other.end2_),
3837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_(other.current2_),
3838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin3_(other.begin3_),
3839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end3_(other.end3_),
3840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_(other.current3_),
3841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin4_(other.begin4_),
3842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end4_(other.end4_),
3843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_(other.current4_),
3844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin5_(other.begin5_),
3845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end5_(other.end5_),
3846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_(other.current5_),
3847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin6_(other.begin6_),
3848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end6_(other.end6_),
3849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current6_(other.current6_) {
3850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void ComputeCurrentValue() {
3854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (!AtEnd())
3855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current_value_ = ParamType(*current1_, *current2_, *current3_,
3856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter            *current4_, *current5_, *current6_);
3857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    bool AtEnd() const {
3859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterator past the end of the range when either of the
3860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // component iterators has reached the end of its range.
3861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return
3862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == end1_ ||
3863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == end2_ ||
3864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == end3_ ||
3865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == end4_ ||
3866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == end5_ ||
3867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current6_ == end6_;
3868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // No implementation - assignment is unsupported.
3871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void operator=(const Iterator& other);
3872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const ParamGeneratorInterface<ParamType>* const base_;
3874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // current[i]_ is the actual traversing iterator.
3876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator begin1_;
3877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator end1_;
3878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T1>::iterator current1_;
3879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator begin2_;
3880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator end2_;
3881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T2>::iterator current2_;
3882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator begin3_;
3883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator end3_;
3884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T3>::iterator current3_;
3885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator begin4_;
3886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator end4_;
3887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T4>::iterator current4_;
3888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator begin5_;
3889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator end5_;
3890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T5>::iterator current5_;
3891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T6>::iterator begin6_;
3892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T6>::iterator end6_;
3893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T6>::iterator current6_;
3894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    ParamType current_value_;
3895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  };  // class CartesianProductGenerator6::Iterator
3896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
3898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductGenerator6& other);
3899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T1> g1_;
3901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T2> g2_;
3902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T3> g3_;
3903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T4> g4_;
3904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T5> g5_;
3905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T6> g6_;
3906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductGenerator6
3907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
3910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7>
3911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductGenerator7
3912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
3913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        T7> > {
3914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
3915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
3916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  CartesianProductGenerator7(const ParamGenerator<T1>& g1,
3918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
3920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)
3921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
3922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ~CartesianProductGenerator7() {}
3923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* Begin() const {
3925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
3927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g7_.begin());
3928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* End() const {
3930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
3932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
3933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
3935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  class Iterator : public ParamIteratorInterface<ParamType> {
3936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   public:
3937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const ParamGeneratorInterface<ParamType>* base,
3938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T1>& g1,
3939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T1>::iterator& current1,
3940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2,
3941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T2>::iterator& current2,
3942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T3>& g3,
3943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T3>::iterator& current3,
3944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4,
3945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T4>::iterator& current4,
3946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T5>& g5,
3947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T5>::iterator& current5,
3948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T6>& g6,
3949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T6>::iterator& current6,
3950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T7>& g7,
3951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T7>::iterator& current7)
3952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(base),
3953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
3957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
3958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
3959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin7_(g7.begin()), end7_(g7.end()), current7_(current7)    {
3960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ~Iterator() {}
3963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
3964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return base_;
3966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // Advance should not be called on beyond-of-range iterators
3968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // so no component iterators must be beyond end of range, either.
3969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual void Advance() {
3970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      assert(!AtEnd());
3971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ++current7_;
3972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current7_ == end7_) {
3973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current7_ = begin7_;
3974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current6_;
3975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current6_ == end6_) {
3977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current6_ = begin6_;
3978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current5_;
3979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current5_ == end5_) {
3981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_ = begin5_;
3982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current4_;
3983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current4_ == end4_) {
3985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_ = begin4_;
3986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current3_;
3987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current3_ == end3_) {
3989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_ = begin3_;
3990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current2_;
3991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current2_ == end2_) {
3993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_ = begin2_;
3994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current1_;
3995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
3996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
3997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
3998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ParamIteratorInterface<ParamType>* Clone() const {
3999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return new Iterator(*this);
4000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamType* Current() const { return &current_value_; }
4002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // Having the same base generator guarantees that the other
4004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // iterator is of the same type and we can downcast.
4005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "The program attempted to compare iterators "
4007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "from different generators." << std::endl;
4008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const Iterator* typed_other =
4009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          CheckedDowncastToActualType<const Iterator>(&other);
4010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterators equal if they both point beyond their
4011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // respective ranges. That can happen in a variety of fashions,
4012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // so we have to consult AtEnd().
4013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return (AtEnd() && typed_other->AtEnd()) ||
4014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter         (
4015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == typed_other->current1_ &&
4016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == typed_other->current2_ &&
4017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == typed_other->current3_ &&
4018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == typed_other->current4_ &&
4019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == typed_other->current5_ &&
4020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current6_ == typed_other->current6_ &&
4021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current7_ == typed_other->current7_);
4022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   private:
4025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const Iterator& other)
4026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(other.base_),
4027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin1_(other.begin1_),
4028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end1_(other.end1_),
4029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current1_(other.current1_),
4030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin2_(other.begin2_),
4031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end2_(other.end2_),
4032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_(other.current2_),
4033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin3_(other.begin3_),
4034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end3_(other.end3_),
4035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_(other.current3_),
4036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin4_(other.begin4_),
4037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end4_(other.end4_),
4038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_(other.current4_),
4039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin5_(other.begin5_),
4040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end5_(other.end5_),
4041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_(other.current5_),
4042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin6_(other.begin6_),
4043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end6_(other.end6_),
4044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current6_(other.current6_),
4045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin7_(other.begin7_),
4046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end7_(other.end7_),
4047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current7_(other.current7_) {
4048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
4049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void ComputeCurrentValue() {
4052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (!AtEnd())
4053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current_value_ = ParamType(*current1_, *current2_, *current3_,
4054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter            *current4_, *current5_, *current6_, *current7_);
4055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    bool AtEnd() const {
4057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterator past the end of the range when either of the
4058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // component iterators has reached the end of its range.
4059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return
4060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == end1_ ||
4061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == end2_ ||
4062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == end3_ ||
4063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == end4_ ||
4064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == end5_ ||
4065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current6_ == end6_ ||
4066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current7_ == end7_;
4067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // No implementation - assignment is unsupported.
4070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void operator=(const Iterator& other);
4071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const ParamGeneratorInterface<ParamType>* const base_;
4073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // current[i]_ is the actual traversing iterator.
4075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator begin1_;
4076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator end1_;
4077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T1>::iterator current1_;
4078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator begin2_;
4079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator end2_;
4080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T2>::iterator current2_;
4081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator begin3_;
4082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator end3_;
4083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T3>::iterator current3_;
4084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator begin4_;
4085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator end4_;
4086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T4>::iterator current4_;
4087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator begin5_;
4088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator end5_;
4089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T5>::iterator current5_;
4090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T6>::iterator begin6_;
4091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T6>::iterator end6_;
4092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T6>::iterator current6_;
4093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T7>::iterator begin7_;
4094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T7>::iterator end7_;
4095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T7>::iterator current7_;
4096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    ParamType current_value_;
4097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  };  // class CartesianProductGenerator7::Iterator
4098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
4100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductGenerator7& other);
4101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T1> g1_;
4103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T2> g2_;
4104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T3> g3_;
4105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T4> g4_;
4106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T5> g5_;
4107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T6> g6_;
4108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T7> g7_;
4109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductGenerator7
4110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8>
4114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductGenerator8
4115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        T7, T8> > {
4117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
4118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
4119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  CartesianProductGenerator8(const ParamGenerator<T1>& g1,
4121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T8>& g8)
4125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
4126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          g8_(g8) {}
4127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ~CartesianProductGenerator8() {}
4128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* Begin() const {
4130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g7_.begin(), g8_, g8_.begin());
4133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* End() const {
4135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g8_.end());
4138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
4141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  class Iterator : public ParamIteratorInterface<ParamType> {
4142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   public:
4143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const ParamGeneratorInterface<ParamType>* base,
4144aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T1>& g1,
4145aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T1>::iterator& current1,
4146aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2,
4147aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T2>::iterator& current2,
4148aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T3>& g3,
4149aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T3>::iterator& current3,
4150aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4,
4151aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T4>::iterator& current4,
4152aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T5>& g5,
4153aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T5>::iterator& current5,
4154aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T6>& g6,
4155aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T6>::iterator& current6,
4156aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T7>& g7,
4157aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T7>::iterator& current7,
4158aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T8>& g8,
4159aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T8>::iterator& current8)
4160aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(base),
4161aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4162aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4163aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4164aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4165aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4166aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4167aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4168aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin8_(g8.begin()), end8_(g8.end()), current8_(current8)    {
4169aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
4170aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4171aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ~Iterator() {}
4172aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4173aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4174aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return base_;
4175aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4176aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // Advance should not be called on beyond-of-range iterators
4177aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // so no component iterators must be beyond end of range, either.
4178aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual void Advance() {
4179aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      assert(!AtEnd());
4180aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ++current8_;
4181aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current8_ == end8_) {
4182aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current8_ = begin8_;
4183aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current7_;
4184aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4185aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current7_ == end7_) {
4186aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current7_ = begin7_;
4187aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current6_;
4188aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4189aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current6_ == end6_) {
4190aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current6_ = begin6_;
4191aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current5_;
4192aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4193aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current5_ == end5_) {
4194aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_ = begin5_;
4195aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current4_;
4196aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4197aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current4_ == end4_) {
4198aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_ = begin4_;
4199aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current3_;
4200aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4201aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current3_ == end3_) {
4202aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_ = begin3_;
4203aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current2_;
4204aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4205aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current2_ == end2_) {
4206aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_ = begin2_;
4207aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current1_;
4208aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4209aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
4210aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4211aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ParamIteratorInterface<ParamType>* Clone() const {
4212aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return new Iterator(*this);
4213aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4214aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamType* Current() const { return &current_value_; }
4215aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4216aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // Having the same base generator guarantees that the other
4217aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // iterator is of the same type and we can downcast.
4218aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4219aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "The program attempted to compare iterators "
4220aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "from different generators." << std::endl;
4221aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const Iterator* typed_other =
4222aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          CheckedDowncastToActualType<const Iterator>(&other);
4223aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterators equal if they both point beyond their
4224aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // respective ranges. That can happen in a variety of fashions,
4225aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // so we have to consult AtEnd().
4226aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return (AtEnd() && typed_other->AtEnd()) ||
4227aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter         (
4228aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == typed_other->current1_ &&
4229aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == typed_other->current2_ &&
4230aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == typed_other->current3_ &&
4231aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == typed_other->current4_ &&
4232aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == typed_other->current5_ &&
4233aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current6_ == typed_other->current6_ &&
4234aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current7_ == typed_other->current7_ &&
4235aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current8_ == typed_other->current8_);
4236aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4237aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4238aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   private:
4239aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const Iterator& other)
4240aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(other.base_),
4241aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin1_(other.begin1_),
4242aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end1_(other.end1_),
4243aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current1_(other.current1_),
4244aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin2_(other.begin2_),
4245aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end2_(other.end2_),
4246aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_(other.current2_),
4247aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin3_(other.begin3_),
4248aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end3_(other.end3_),
4249aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_(other.current3_),
4250aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin4_(other.begin4_),
4251aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end4_(other.end4_),
4252aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_(other.current4_),
4253aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin5_(other.begin5_),
4254aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end5_(other.end5_),
4255aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_(other.current5_),
4256aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin6_(other.begin6_),
4257aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end6_(other.end6_),
4258aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current6_(other.current6_),
4259aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin7_(other.begin7_),
4260aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end7_(other.end7_),
4261aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current7_(other.current7_),
4262aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin8_(other.begin8_),
4263aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end8_(other.end8_),
4264aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current8_(other.current8_) {
4265aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
4266aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4267aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4268aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void ComputeCurrentValue() {
4269aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (!AtEnd())
4270aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current_value_ = ParamType(*current1_, *current2_, *current3_,
4271aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter            *current4_, *current5_, *current6_, *current7_, *current8_);
4272aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4273aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    bool AtEnd() const {
4274aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterator past the end of the range when either of the
4275aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // component iterators has reached the end of its range.
4276aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return
4277aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == end1_ ||
4278aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == end2_ ||
4279aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == end3_ ||
4280aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == end4_ ||
4281aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == end5_ ||
4282aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current6_ == end6_ ||
4283aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current7_ == end7_ ||
4284aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current8_ == end8_;
4285aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4286aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4287aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // No implementation - assignment is unsupported.
4288aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void operator=(const Iterator& other);
4289aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4290aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const ParamGeneratorInterface<ParamType>* const base_;
4291aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4292aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // current[i]_ is the actual traversing iterator.
4293aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator begin1_;
4294aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator end1_;
4295aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T1>::iterator current1_;
4296aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator begin2_;
4297aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator end2_;
4298aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T2>::iterator current2_;
4299aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator begin3_;
4300aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator end3_;
4301aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T3>::iterator current3_;
4302aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator begin4_;
4303aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator end4_;
4304aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T4>::iterator current4_;
4305aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator begin5_;
4306aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator end5_;
4307aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T5>::iterator current5_;
4308aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T6>::iterator begin6_;
4309aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T6>::iterator end6_;
4310aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T6>::iterator current6_;
4311aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T7>::iterator begin7_;
4312aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T7>::iterator end7_;
4313aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T7>::iterator current7_;
4314aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T8>::iterator begin8_;
4315aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T8>::iterator end8_;
4316aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T8>::iterator current8_;
4317aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    ParamType current_value_;
4318aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  };  // class CartesianProductGenerator8::Iterator
4319aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4320aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
4321aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductGenerator8& other);
4322aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4323aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T1> g1_;
4324aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T2> g2_;
4325aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T3> g3_;
4326aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T4> g4_;
4327aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T5> g5_;
4328aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T6> g6_;
4329aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T7> g7_;
4330aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T8> g8_;
4331aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductGenerator8
4332aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4333aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4334aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4335aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9>
4336aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductGenerator9
4337aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4338aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        T7, T8, T9> > {
4339aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
4340aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
4341aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4342aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  CartesianProductGenerator9(const ParamGenerator<T1>& g1,
4343aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4344aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4345aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4346aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)
4347aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4348aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          g9_(g9) {}
4349aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ~CartesianProductGenerator9() {}
4350aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4351aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* Begin() const {
4352aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4353aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4354aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
4355aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4356aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* End() const {
4357aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4358aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4359aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g8_.end(), g9_, g9_.end());
4360aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4361aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4362aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
4363aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  class Iterator : public ParamIteratorInterface<ParamType> {
4364aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   public:
4365aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const ParamGeneratorInterface<ParamType>* base,
4366aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T1>& g1,
4367aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T1>::iterator& current1,
4368aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2,
4369aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T2>::iterator& current2,
4370aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T3>& g3,
4371aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T3>::iterator& current3,
4372aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4,
4373aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T4>::iterator& current4,
4374aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T5>& g5,
4375aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T5>::iterator& current5,
4376aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T6>& g6,
4377aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T6>::iterator& current6,
4378aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T7>& g7,
4379aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T7>::iterator& current7,
4380aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T8>& g8,
4381aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T8>::iterator& current8,
4382aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T9>& g9,
4383aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T9>::iterator& current9)
4384aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(base),
4385aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4386aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4387aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4388aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4389aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4390aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4391aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4392aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4393aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin9_(g9.begin()), end9_(g9.end()), current9_(current9)    {
4394aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
4395aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4396aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ~Iterator() {}
4397aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4398aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4399aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return base_;
4400aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4401aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // Advance should not be called on beyond-of-range iterators
4402aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // so no component iterators must be beyond end of range, either.
4403aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual void Advance() {
4404aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      assert(!AtEnd());
4405aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ++current9_;
4406aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current9_ == end9_) {
4407aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current9_ = begin9_;
4408aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current8_;
4409aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4410aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current8_ == end8_) {
4411aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current8_ = begin8_;
4412aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current7_;
4413aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4414aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current7_ == end7_) {
4415aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current7_ = begin7_;
4416aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current6_;
4417aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4418aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current6_ == end6_) {
4419aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current6_ = begin6_;
4420aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current5_;
4421aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4422aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current5_ == end5_) {
4423aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_ = begin5_;
4424aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current4_;
4425aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4426aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current4_ == end4_) {
4427aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_ = begin4_;
4428aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current3_;
4429aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4430aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current3_ == end3_) {
4431aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_ = begin3_;
4432aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current2_;
4433aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4434aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current2_ == end2_) {
4435aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_ = begin2_;
4436aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current1_;
4437aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4438aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
4439aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4440aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ParamIteratorInterface<ParamType>* Clone() const {
4441aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return new Iterator(*this);
4442aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4443aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamType* Current() const { return &current_value_; }
4444aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4445aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // Having the same base generator guarantees that the other
4446aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // iterator is of the same type and we can downcast.
4447aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4448aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "The program attempted to compare iterators "
4449aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "from different generators." << std::endl;
4450aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const Iterator* typed_other =
4451aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          CheckedDowncastToActualType<const Iterator>(&other);
4452aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterators equal if they both point beyond their
4453aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // respective ranges. That can happen in a variety of fashions,
4454aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // so we have to consult AtEnd().
4455aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return (AtEnd() && typed_other->AtEnd()) ||
4456aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter         (
4457aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == typed_other->current1_ &&
4458aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == typed_other->current2_ &&
4459aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == typed_other->current3_ &&
4460aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == typed_other->current4_ &&
4461aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == typed_other->current5_ &&
4462aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current6_ == typed_other->current6_ &&
4463aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current7_ == typed_other->current7_ &&
4464aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current8_ == typed_other->current8_ &&
4465aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current9_ == typed_other->current9_);
4466aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4467aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4468aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   private:
4469aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const Iterator& other)
4470aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(other.base_),
4471aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin1_(other.begin1_),
4472aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end1_(other.end1_),
4473aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current1_(other.current1_),
4474aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin2_(other.begin2_),
4475aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end2_(other.end2_),
4476aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_(other.current2_),
4477aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin3_(other.begin3_),
4478aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end3_(other.end3_),
4479aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_(other.current3_),
4480aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin4_(other.begin4_),
4481aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end4_(other.end4_),
4482aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_(other.current4_),
4483aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin5_(other.begin5_),
4484aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end5_(other.end5_),
4485aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_(other.current5_),
4486aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin6_(other.begin6_),
4487aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end6_(other.end6_),
4488aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current6_(other.current6_),
4489aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin7_(other.begin7_),
4490aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end7_(other.end7_),
4491aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current7_(other.current7_),
4492aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin8_(other.begin8_),
4493aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end8_(other.end8_),
4494aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current8_(other.current8_),
4495aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin9_(other.begin9_),
4496aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end9_(other.end9_),
4497aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current9_(other.current9_) {
4498aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
4499aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4500aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4501aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void ComputeCurrentValue() {
4502aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (!AtEnd())
4503aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current_value_ = ParamType(*current1_, *current2_, *current3_,
4504aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter            *current4_, *current5_, *current6_, *current7_, *current8_,
4505aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter            *current9_);
4506aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4507aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    bool AtEnd() const {
4508aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterator past the end of the range when either of the
4509aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // component iterators has reached the end of its range.
4510aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return
4511aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == end1_ ||
4512aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == end2_ ||
4513aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == end3_ ||
4514aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == end4_ ||
4515aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == end5_ ||
4516aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current6_ == end6_ ||
4517aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current7_ == end7_ ||
4518aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current8_ == end8_ ||
4519aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current9_ == end9_;
4520aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4521aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4522aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // No implementation - assignment is unsupported.
4523aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void operator=(const Iterator& other);
4524aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4525aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const ParamGeneratorInterface<ParamType>* const base_;
4526aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4527aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // current[i]_ is the actual traversing iterator.
4528aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator begin1_;
4529aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator end1_;
4530aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T1>::iterator current1_;
4531aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator begin2_;
4532aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator end2_;
4533aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T2>::iterator current2_;
4534aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator begin3_;
4535aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator end3_;
4536aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T3>::iterator current3_;
4537aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator begin4_;
4538aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator end4_;
4539aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T4>::iterator current4_;
4540aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator begin5_;
4541aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator end5_;
4542aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T5>::iterator current5_;
4543aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T6>::iterator begin6_;
4544aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T6>::iterator end6_;
4545aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T6>::iterator current6_;
4546aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T7>::iterator begin7_;
4547aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T7>::iterator end7_;
4548aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T7>::iterator current7_;
4549aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T8>::iterator begin8_;
4550aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T8>::iterator end8_;
4551aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T8>::iterator current8_;
4552aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T9>::iterator begin9_;
4553aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T9>::iterator end9_;
4554aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T9>::iterator current9_;
4555aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    ParamType current_value_;
4556aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  };  // class CartesianProductGenerator9::Iterator
4557aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4558aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
4559aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductGenerator9& other);
4560aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4561aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T1> g1_;
4562aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T2> g2_;
4563aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T3> g3_;
4564aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T4> g4_;
4565aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T5> g5_;
4566aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T6> g6_;
4567aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T7> g7_;
4568aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T8> g8_;
4569aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T9> g9_;
4570aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductGenerator9
4571aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4572aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4573aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <typename T1, typename T2, typename T3, typename T4, typename T5,
4574aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename T6, typename T7, typename T8, typename T9, typename T10>
4575aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductGenerator10
4576aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4577aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        T7, T8, T9, T10> > {
4578aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
4579aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
4580aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4581aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  CartesianProductGenerator10(const ParamGenerator<T1>& g1,
4582aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4583aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4584aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4585aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,
4586aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T10>& g10)
4587aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4588aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          g9_(g9), g10_(g10) {}
4589aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ~CartesianProductGenerator10() {}
4590aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4591aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* Begin() const {
4592aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4593aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4594aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
4595aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4596aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  virtual ParamIteratorInterface<ParamType>* End() const {
4597aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4598aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4599aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        g8_.end(), g9_, g9_.end(), g10_, g10_.end());
4600aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4601aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4602aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
4603aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  class Iterator : public ParamIteratorInterface<ParamType> {
4604aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   public:
4605aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const ParamGeneratorInterface<ParamType>* base,
4606aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T1>& g1,
4607aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T1>::iterator& current1,
4608aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T2>& g2,
4609aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T2>::iterator& current2,
4610aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T3>& g3,
4611aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T3>::iterator& current3,
4612aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T4>& g4,
4613aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T4>::iterator& current4,
4614aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T5>& g5,
4615aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T5>::iterator& current5,
4616aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T6>& g6,
4617aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T6>::iterator& current6,
4618aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T7>& g7,
4619aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T7>::iterator& current7,
4620aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T8>& g8,
4621aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T8>::iterator& current8,
4622aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T9>& g9,
4623aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T9>::iterator& current9,
4624aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const ParamGenerator<T10>& g10,
4625aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const typename ParamGenerator<T10>::iterator& current10)
4626aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(base),
4627aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4628aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4629aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4630aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4631aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4632aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4633aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4634aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4635aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
4636aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          begin10_(g10.begin()), end10_(g10.end()), current10_(current10)    {
4637aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
4638aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4639aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ~Iterator() {}
4640aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4641aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4642aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return base_;
4643aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4644aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // Advance should not be called on beyond-of-range iterators
4645aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // so no component iterators must be beyond end of range, either.
4646aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual void Advance() {
4647aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      assert(!AtEnd());
4648aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ++current10_;
4649aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current10_ == end10_) {
4650aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current10_ = begin10_;
4651aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current9_;
4652aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4653aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current9_ == end9_) {
4654aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current9_ = begin9_;
4655aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current8_;
4656aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4657aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current8_ == end8_) {
4658aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current8_ = begin8_;
4659aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current7_;
4660aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4661aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current7_ == end7_) {
4662aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current7_ = begin7_;
4663aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current6_;
4664aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4665aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current6_ == end6_) {
4666aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current6_ = begin6_;
4667aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current5_;
4668aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4669aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current5_ == end5_) {
4670aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_ = begin5_;
4671aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current4_;
4672aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4673aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current4_ == end4_) {
4674aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_ = begin4_;
4675aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current3_;
4676aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4677aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current3_ == end3_) {
4678aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_ = begin3_;
4679aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current2_;
4680aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4681aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (current2_ == end2_) {
4682aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_ = begin2_;
4683aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        ++current1_;
4684aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      }
4685aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
4686aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4687aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual ParamIteratorInterface<ParamType>* Clone() const {
4688aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return new Iterator(*this);
4689aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4690aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual const ParamType* Current() const { return &current_value_; }
4691aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4692aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // Having the same base generator guarantees that the other
4693aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // iterator is of the same type and we can downcast.
4694aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4695aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "The program attempted to compare iterators "
4696aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          << "from different generators." << std::endl;
4697aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      const Iterator* typed_other =
4698aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          CheckedDowncastToActualType<const Iterator>(&other);
4699aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterators equal if they both point beyond their
4700aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // respective ranges. That can happen in a variety of fashions,
4701aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // so we have to consult AtEnd().
4702aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return (AtEnd() && typed_other->AtEnd()) ||
4703aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter         (
4704aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == typed_other->current1_ &&
4705aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == typed_other->current2_ &&
4706aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == typed_other->current3_ &&
4707aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == typed_other->current4_ &&
4708aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == typed_other->current5_ &&
4709aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current6_ == typed_other->current6_ &&
4710aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current7_ == typed_other->current7_ &&
4711aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current8_ == typed_other->current8_ &&
4712aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current9_ == typed_other->current9_ &&
4713aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current10_ == typed_other->current10_);
4714aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4715aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4716aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter   private:
4717aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Iterator(const Iterator& other)
4718aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        : base_(other.base_),
4719aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin1_(other.begin1_),
4720aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end1_(other.end1_),
4721aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current1_(other.current1_),
4722aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin2_(other.begin2_),
4723aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end2_(other.end2_),
4724aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current2_(other.current2_),
4725aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin3_(other.begin3_),
4726aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end3_(other.end3_),
4727aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current3_(other.current3_),
4728aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin4_(other.begin4_),
4729aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end4_(other.end4_),
4730aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current4_(other.current4_),
4731aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin5_(other.begin5_),
4732aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end5_(other.end5_),
4733aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current5_(other.current5_),
4734aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin6_(other.begin6_),
4735aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end6_(other.end6_),
4736aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current6_(other.current6_),
4737aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin7_(other.begin7_),
4738aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end7_(other.end7_),
4739aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current7_(other.current7_),
4740aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin8_(other.begin8_),
4741aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end8_(other.end8_),
4742aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current8_(other.current8_),
4743aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin9_(other.begin9_),
4744aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end9_(other.end9_),
4745aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current9_(other.current9_),
4746aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        begin10_(other.begin10_),
4747aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        end10_(other.end10_),
4748aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current10_(other.current10_) {
4749aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      ComputeCurrentValue();
4750aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4751aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4752aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void ComputeCurrentValue() {
4753aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      if (!AtEnd())
4754aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        current_value_ = ParamType(*current1_, *current2_, *current3_,
4755aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter            *current4_, *current5_, *current6_, *current7_, *current8_,
4756aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter            *current9_, *current10_);
4757aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4758aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    bool AtEnd() const {
4759aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // We must report iterator past the end of the range when either of the
4760aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      // component iterators has reached the end of its range.
4761aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      return
4762aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current1_ == end1_ ||
4763aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current2_ == end2_ ||
4764aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current3_ == end3_ ||
4765aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current4_ == end4_ ||
4766aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current5_ == end5_ ||
4767aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current6_ == end6_ ||
4768aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current7_ == end7_ ||
4769aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current8_ == end8_ ||
4770aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current9_ == end9_ ||
4771aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          current10_ == end10_;
4772aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    }
4773aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4774aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // No implementation - assignment is unsupported.
4775aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    void operator=(const Iterator& other);
4776aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4777aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const ParamGeneratorInterface<ParamType>* const base_;
4778aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4779aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    // current[i]_ is the actual traversing iterator.
4780aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator begin1_;
4781aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T1>::iterator end1_;
4782aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T1>::iterator current1_;
4783aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator begin2_;
4784aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T2>::iterator end2_;
4785aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T2>::iterator current2_;
4786aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator begin3_;
4787aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T3>::iterator end3_;
4788aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T3>::iterator current3_;
4789aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator begin4_;
4790aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T4>::iterator end4_;
4791aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T4>::iterator current4_;
4792aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator begin5_;
4793aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T5>::iterator end5_;
4794aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T5>::iterator current5_;
4795aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T6>::iterator begin6_;
4796aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T6>::iterator end6_;
4797aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T6>::iterator current6_;
4798aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T7>::iterator begin7_;
4799aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T7>::iterator end7_;
4800aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T7>::iterator current7_;
4801aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T8>::iterator begin8_;
4802aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T8>::iterator end8_;
4803aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T8>::iterator current8_;
4804aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T9>::iterator begin9_;
4805aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T9>::iterator end9_;
4806aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T9>::iterator current9_;
4807aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T10>::iterator begin10_;
4808aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const typename ParamGenerator<T10>::iterator end10_;
4809aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    typename ParamGenerator<T10>::iterator current10_;
4810aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    ParamType current_value_;
4811aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  };  // class CartesianProductGenerator10::Iterator
4812aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4813aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
4814aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductGenerator10& other);
4815aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4816aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T1> g1_;
4817aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T2> g2_;
4818aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T3> g3_;
4819aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T4> g4_;
4820aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T5> g5_;
4821aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T6> g6_;
4822aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T7> g7_;
4823aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T8> g8_;
4824aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T9> g9_;
4825aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const ParamGenerator<T10> g10_;
4826aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductGenerator10
4827aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4828aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4829aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
4830aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
4831aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Helper classes providing Combine() with polymorphic features. They allow
4832aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
4833aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// convertible to U.
4834aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
4835aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <class Generator1, class Generator2>
4836aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductHolder2 {
4837aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
4838aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterCartesianProductHolder2(const Generator1& g1, const Generator2& g2)
4839aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2) {}
4840aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T1, typename T2>
4841aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator< ::std::tr1::tuple<T1, T2> >() const {
4842aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ParamGenerator< ::std::tr1::tuple<T1, T2> >(
4843aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        new CartesianProductGenerator2<T1, T2>(
4844aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T1> >(g1_),
4845aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T2> >(g2_)));
4846aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4847aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4848aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
4849aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
4850aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductHolder2& other);
4851aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4852aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator1 g1_;
4853aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator2 g2_;
4854aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductHolder2
4855aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4856aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <class Generator1, class Generator2, class Generator3>
4857aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductHolder3 {
4858aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
4859aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterCartesianProductHolder3(const Generator1& g1, const Generator2& g2,
4860aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator3& g3)
4861aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3) {}
4862aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T1, typename T2, typename T3>
4863aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >() const {
4864aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >(
4865aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        new CartesianProductGenerator3<T1, T2, T3>(
4866aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T1> >(g1_),
4867aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T2> >(g2_),
4868aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T3> >(g3_)));
4869aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4870aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4871aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
4872aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
4873aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductHolder3& other);
4874aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4875aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator1 g1_;
4876aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator2 g2_;
4877aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator3 g3_;
4878aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductHolder3
4879aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4880aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <class Generator1, class Generator2, class Generator3,
4881aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    class Generator4>
4882aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductHolder4 {
4883aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
4884aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterCartesianProductHolder4(const Generator1& g1, const Generator2& g2,
4885aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator3& g3, const Generator4& g4)
4886aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
4887aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T1, typename T2, typename T3, typename T4>
4888aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >() const {
4889aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >(
4890aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        new CartesianProductGenerator4<T1, T2, T3, T4>(
4891aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T1> >(g1_),
4892aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T2> >(g2_),
4893aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T3> >(g3_),
4894aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T4> >(g4_)));
4895aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4896aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4897aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
4898aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
4899aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductHolder4& other);
4900aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4901aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator1 g1_;
4902aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator2 g2_;
4903aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator3 g3_;
4904aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator4 g4_;
4905aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductHolder4
4906aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4907aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <class Generator1, class Generator2, class Generator3,
4908aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    class Generator4, class Generator5>
4909aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductHolder5 {
4910aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
4911aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterCartesianProductHolder5(const Generator1& g1, const Generator2& g2,
4912aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator3& g3, const Generator4& g4, const Generator5& g5)
4913aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
4914aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T1, typename T2, typename T3, typename T4, typename T5>
4915aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >() const {
4916aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >(
4917aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
4918aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T1> >(g1_),
4919aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T2> >(g2_),
4920aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T3> >(g3_),
4921aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T4> >(g4_),
4922aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T5> >(g5_)));
4923aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4924aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4925aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
4926aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
4927aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductHolder5& other);
4928aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4929aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator1 g1_;
4930aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator2 g2_;
4931aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator3 g3_;
4932aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator4 g4_;
4933aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator5 g5_;
4934aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductHolder5
4935aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4936aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <class Generator1, class Generator2, class Generator3,
4937aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    class Generator4, class Generator5, class Generator6>
4938aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductHolder6 {
4939aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
4940aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterCartesianProductHolder6(const Generator1& g1, const Generator2& g2,
4941aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator3& g3, const Generator4& g4, const Generator5& g5,
4942aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator6& g6)
4943aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
4944aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T1, typename T2, typename T3, typename T4, typename T5,
4945aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      typename T6>
4946aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >() const {
4947aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >(
4948aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
4949aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T1> >(g1_),
4950aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T2> >(g2_),
4951aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T3> >(g3_),
4952aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T4> >(g4_),
4953aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T5> >(g5_),
4954aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T6> >(g6_)));
4955aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4956aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4957aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
4958aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
4959aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductHolder6& other);
4960aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4961aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator1 g1_;
4962aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator2 g2_;
4963aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator3 g3_;
4964aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator4 g4_;
4965aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator5 g5_;
4966aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator6 g6_;
4967aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductHolder6
4968aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4969aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <class Generator1, class Generator2, class Generator3,
4970aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    class Generator4, class Generator5, class Generator6, class Generator7>
4971aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductHolder7 {
4972aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
4973aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterCartesianProductHolder7(const Generator1& g1, const Generator2& g2,
4974aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator3& g3, const Generator4& g4, const Generator5& g5,
4975aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator6& g6, const Generator7& g7)
4976aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
4977aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T1, typename T2, typename T3, typename T4, typename T5,
4978aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      typename T6, typename T7>
4979aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
4980aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T7> >() const {
4981aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> >(
4982aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
4983aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T1> >(g1_),
4984aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T2> >(g2_),
4985aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T3> >(g3_),
4986aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T4> >(g4_),
4987aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T5> >(g5_),
4988aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T6> >(g6_),
4989aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T7> >(g7_)));
4990aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
4991aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4992aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
4993aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
4994aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductHolder7& other);
4995aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
4996aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator1 g1_;
4997aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator2 g2_;
4998aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator3 g3_;
4999aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator4 g4_;
5000aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator5 g5_;
5001aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator6 g6_;
5002aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator7 g7_;
5003aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductHolder7
5004aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5005aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <class Generator1, class Generator2, class Generator3,
5006aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    class Generator4, class Generator5, class Generator6, class Generator7,
5007aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    class Generator8>
5008aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductHolder8 {
5009aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
5010aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterCartesianProductHolder8(const Generator1& g1, const Generator2& g2,
5011aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator3& g3, const Generator4& g4, const Generator5& g5,
5012aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator6& g6, const Generator7& g7, const Generator8& g8)
5013aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
5014aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          g8_(g8) {}
5015aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T1, typename T2, typename T3, typename T4, typename T5,
5016aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      typename T6, typename T7, typename T8>
5017aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7,
5018aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T8> >() const {
5019aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
5020aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
5021aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T1> >(g1_),
5022aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T2> >(g2_),
5023aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T3> >(g3_),
5024aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T4> >(g4_),
5025aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T5> >(g5_),
5026aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T6> >(g6_),
5027aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T7> >(g7_),
5028aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T8> >(g8_)));
5029aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
5030aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5031aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
5032aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
5033aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductHolder8& other);
5034aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5035aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator1 g1_;
5036aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator2 g2_;
5037aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator3 g3_;
5038aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator4 g4_;
5039aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator5 g5_;
5040aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator6 g6_;
5041aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator7 g7_;
5042aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator8 g8_;
5043aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductHolder8
5044aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5045aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <class Generator1, class Generator2, class Generator3,
5046aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    class Generator4, class Generator5, class Generator6, class Generator7,
5047aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    class Generator8, class Generator9>
5048aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductHolder9 {
5049aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
5050aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterCartesianProductHolder9(const Generator1& g1, const Generator2& g2,
5051aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator3& g3, const Generator4& g4, const Generator5& g5,
5052aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator6& g6, const Generator7& g7, const Generator8& g8,
5053aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator9& g9)
5054aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5055aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          g9_(g9) {}
5056aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T1, typename T2, typename T3, typename T4, typename T5,
5057aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      typename T6, typename T7, typename T8, typename T9>
5058aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5059aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T9> >() const {
5060aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5061aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        T9> >(
5062aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
5063aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T1> >(g1_),
5064aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T2> >(g2_),
5065aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T3> >(g3_),
5066aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T4> >(g4_),
5067aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T5> >(g5_),
5068aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T6> >(g6_),
5069aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T7> >(g7_),
5070aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T8> >(g8_),
5071aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T9> >(g9_)));
5072aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
5073aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5074aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
5075aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
5076aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductHolder9& other);
5077aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5078aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator1 g1_;
5079aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator2 g2_;
5080aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator3 g3_;
5081aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator4 g4_;
5082aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator5 g5_;
5083aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator6 g6_;
5084aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator7 g7_;
5085aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator8 g8_;
5086aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator9 g9_;
5087aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductHolder9
5088aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5089aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchtertemplate <class Generator1, class Generator2, class Generator3,
5090aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    class Generator4, class Generator5, class Generator6, class Generator7,
5091aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    class Generator8, class Generator9, class Generator10>
5092aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass CartesianProductHolder10 {
5093aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
5094aa46da279e2426caf1e103eb079dfec8124c5feeCourtney GoeltzenleuchterCartesianProductHolder10(const Generator1& g1, const Generator2& g2,
5095aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator3& g3, const Generator4& g4, const Generator5& g5,
5096aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator6& g6, const Generator7& g7, const Generator8& g8,
5097aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    const Generator9& g9, const Generator10& g10)
5098aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5099aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter          g9_(g9), g10_(g10) {}
5100aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  template <typename T1, typename T2, typename T3, typename T4, typename T5,
5101aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      typename T6, typename T7, typename T8, typename T9, typename T10>
5102aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5103aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter      T9, T10> >() const {
5104aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5105aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        T9, T10> >(
5106aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5107aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter            T10>(
5108aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T1> >(g1_),
5109aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T2> >(g2_),
5110aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T3> >(g3_),
5111aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T4> >(g4_),
5112aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T5> >(g5_),
5113aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T6> >(g6_),
5114aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T7> >(g7_),
5115aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T8> >(g8_),
5116aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T9> >(g9_),
5117aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter        static_cast<ParamGenerator<T10> >(g10_)));
5118aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
5119aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5120aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
5121aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // No implementation - assignment is unsupported.
5122aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void operator=(const CartesianProductHolder10& other);
5123aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5124aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator1 g1_;
5125aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator2 g2_;
5126aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator3 g3_;
5127aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator4 g4_;
5128aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator5 g5_;
5129aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator6 g6_;
5130aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator7 g7_;
5131aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator8 g8_;
5132aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator9 g9_;
5133aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const Generator10 g10_;
5134aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};  // class CartesianProductHolder10
5135aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5136aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter# endif  // GTEST_HAS_COMBINE
5137aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5138aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}  // namespace internal
5139aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter}  // namespace testing
5140aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5141aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif  //  GTEST_HAS_PARAM_TEST
5142aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
5143aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
5144