1// This file was GENERATED by command:
2//     pump.py gtest-param-util-generated.h.pump
3// DO NOT EDIT BY HAND!!!
4
5// Copyright 2008 Google Inc.
6// All Rights Reserved.
7//
8// Redistribution and use in source and binary forms, with or without
9// modification, are permitted provided that the following conditions are
10// met:
11//
12//     * Redistributions of source code must retain the above copyright
13// notice, this list of conditions and the following disclaimer.
14//     * Redistributions in binary form must reproduce the above
15// copyright notice, this list of conditions and the following disclaimer
16// in the documentation and/or other materials provided with the
17// distribution.
18//     * Neither the name of Google Inc. nor the names of its
19// contributors may be used to endorse or promote products derived from
20// this software without specific prior written permission.
21//
22// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33//
34// Author: vladl@google.com (Vlad Losev)
35
36// Type and function utilities for implementing parameterized tests.
37// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
38//
39// Currently Google Test supports at most 50 arguments in Values,
40// and at most 10 arguments in Combine. Please contact
41// googletestframework@googlegroups.com if you need more.
42// Please note that the number of arguments to Combine is limited
43// by the maximum arity of the implementation of tr1::tuple which is
44// currently set at 10.
45
46#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
47#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
48
49// scripts/fuse_gtest.py depends on gtest's own header being #included
50// *unconditionally*.  Therefore these #includes cannot be moved
51// inside #if GTEST_HAS_PARAM_TEST.
52#include "gtest/internal/gtest-param-util.h"
53#include "gtest/internal/gtest-port.h"
54
55#if GTEST_HAS_PARAM_TEST
56
57namespace testing {
58
59// Forward declarations of ValuesIn(), which is implemented in
60// include/gtest/gtest-param-test.h.
61template <typename ForwardIterator>
62internal::ParamGenerator<
63  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
64ValuesIn(ForwardIterator begin, ForwardIterator end);
65
66template <typename T, size_t N>
67internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
68
69template <class Container>
70internal::ParamGenerator<typename Container::value_type> ValuesIn(
71    const Container& container);
72
73namespace internal {
74
75// Used in the Values() function to provide polymorphic capabilities.
76template <typename T1>
77class ValueArray1 {
78 public:
79  explicit ValueArray1(T1 v1) : v1_(v1) {}
80
81  template <typename T>
82  operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
83
84 private:
85  // No implementation - assignment is unsupported.
86  void operator=(const ValueArray1& other);
87
88  const T1 v1_;
89};
90
91template <typename T1, typename T2>
92class ValueArray2 {
93 public:
94  ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
95
96  template <typename T>
97  operator ParamGenerator<T>() const {
98    const T array[] = {v1_, v2_};
99    return ValuesIn(array);
100  }
101
102 private:
103  // No implementation - assignment is unsupported.
104  void operator=(const ValueArray2& other);
105
106  const T1 v1_;
107  const T2 v2_;
108};
109
110template <typename T1, typename T2, typename T3>
111class ValueArray3 {
112 public:
113  ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
114
115  template <typename T>
116  operator ParamGenerator<T>() const {
117    const T array[] = {v1_, v2_, v3_};
118    return ValuesIn(array);
119  }
120
121 private:
122  // No implementation - assignment is unsupported.
123  void operator=(const ValueArray3& other);
124
125  const T1 v1_;
126  const T2 v2_;
127  const T3 v3_;
128};
129
130template <typename T1, typename T2, typename T3, typename T4>
131class ValueArray4 {
132 public:
133  ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
134      v4_(v4) {}
135
136  template <typename T>
137  operator ParamGenerator<T>() const {
138    const T array[] = {v1_, v2_, v3_, v4_};
139    return ValuesIn(array);
140  }
141
142 private:
143  // No implementation - assignment is unsupported.
144  void operator=(const ValueArray4& other);
145
146  const T1 v1_;
147  const T2 v2_;
148  const T3 v3_;
149  const T4 v4_;
150};
151
152template <typename T1, typename T2, typename T3, typename T4, typename T5>
153class ValueArray5 {
154 public:
155  ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
156      v4_(v4), v5_(v5) {}
157
158  template <typename T>
159  operator ParamGenerator<T>() const {
160    const T array[] = {v1_, v2_, v3_, v4_, v5_};
161    return ValuesIn(array);
162  }
163
164 private:
165  // No implementation - assignment is unsupported.
166  void operator=(const ValueArray5& other);
167
168  const T1 v1_;
169  const T2 v2_;
170  const T3 v3_;
171  const T4 v4_;
172  const T5 v5_;
173};
174
175template <typename T1, typename T2, typename T3, typename T4, typename T5,
176    typename T6>
177class ValueArray6 {
178 public:
179  ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
180      v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
181
182  template <typename T>
183  operator ParamGenerator<T>() const {
184    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_};
185    return ValuesIn(array);
186  }
187
188 private:
189  // No implementation - assignment is unsupported.
190  void operator=(const ValueArray6& other);
191
192  const T1 v1_;
193  const T2 v2_;
194  const T3 v3_;
195  const T4 v4_;
196  const T5 v5_;
197  const T6 v6_;
198};
199
200template <typename T1, typename T2, typename T3, typename T4, typename T5,
201    typename T6, typename T7>
202class ValueArray7 {
203 public:
204  ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
205      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
206
207  template <typename T>
208  operator ParamGenerator<T>() const {
209    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_};
210    return ValuesIn(array);
211  }
212
213 private:
214  // No implementation - assignment is unsupported.
215  void operator=(const ValueArray7& other);
216
217  const T1 v1_;
218  const T2 v2_;
219  const T3 v3_;
220  const T4 v4_;
221  const T5 v5_;
222  const T6 v6_;
223  const T7 v7_;
224};
225
226template <typename T1, typename T2, typename T3, typename T4, typename T5,
227    typename T6, typename T7, typename T8>
228class ValueArray8 {
229 public:
230  ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
231      T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
232      v8_(v8) {}
233
234  template <typename T>
235  operator ParamGenerator<T>() const {
236    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_};
237    return ValuesIn(array);
238  }
239
240 private:
241  // No implementation - assignment is unsupported.
242  void operator=(const ValueArray8& other);
243
244  const T1 v1_;
245  const T2 v2_;
246  const T3 v3_;
247  const T4 v4_;
248  const T5 v5_;
249  const T6 v6_;
250  const T7 v7_;
251  const T8 v8_;
252};
253
254template <typename T1, typename T2, typename T3, typename T4, typename T5,
255    typename T6, typename T7, typename T8, typename T9>
256class ValueArray9 {
257 public:
258  ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
259      T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
260      v8_(v8), v9_(v9) {}
261
262  template <typename T>
263  operator ParamGenerator<T>() const {
264    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_};
265    return ValuesIn(array);
266  }
267
268 private:
269  // No implementation - assignment is unsupported.
270  void operator=(const ValueArray9& other);
271
272  const T1 v1_;
273  const T2 v2_;
274  const T3 v3_;
275  const T4 v4_;
276  const T5 v5_;
277  const T6 v6_;
278  const T7 v7_;
279  const T8 v8_;
280  const T9 v9_;
281};
282
283template <typename T1, typename T2, typename T3, typename T4, typename T5,
284    typename T6, typename T7, typename T8, typename T9, typename T10>
285class ValueArray10 {
286 public:
287  ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
288      T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
289      v8_(v8), v9_(v9), v10_(v10) {}
290
291  template <typename T>
292  operator ParamGenerator<T>() const {
293    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_};
294    return ValuesIn(array);
295  }
296
297 private:
298  // No implementation - assignment is unsupported.
299  void operator=(const ValueArray10& other);
300
301  const T1 v1_;
302  const T2 v2_;
303  const T3 v3_;
304  const T4 v4_;
305  const T5 v5_;
306  const T6 v6_;
307  const T7 v7_;
308  const T8 v8_;
309  const T9 v9_;
310  const T10 v10_;
311};
312
313template <typename T1, typename T2, typename T3, typename T4, typename T5,
314    typename T6, typename T7, typename T8, typename T9, typename T10,
315    typename T11>
316class ValueArray11 {
317 public:
318  ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
319      T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
320      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
321
322  template <typename T>
323  operator ParamGenerator<T>() const {
324    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_};
325    return ValuesIn(array);
326  }
327
328 private:
329  // No implementation - assignment is unsupported.
330  void operator=(const ValueArray11& other);
331
332  const T1 v1_;
333  const T2 v2_;
334  const T3 v3_;
335  const T4 v4_;
336  const T5 v5_;
337  const T6 v6_;
338  const T7 v7_;
339  const T8 v8_;
340  const T9 v9_;
341  const T10 v10_;
342  const T11 v11_;
343};
344
345template <typename T1, typename T2, typename T3, typename T4, typename T5,
346    typename T6, typename T7, typename T8, typename T9, typename T10,
347    typename T11, typename T12>
348class ValueArray12 {
349 public:
350  ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
351      T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
352      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
353
354  template <typename T>
355  operator ParamGenerator<T>() const {
356    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
357        v12_};
358    return ValuesIn(array);
359  }
360
361 private:
362  // No implementation - assignment is unsupported.
363  void operator=(const ValueArray12& other);
364
365  const T1 v1_;
366  const T2 v2_;
367  const T3 v3_;
368  const T4 v4_;
369  const T5 v5_;
370  const T6 v6_;
371  const T7 v7_;
372  const T8 v8_;
373  const T9 v9_;
374  const T10 v10_;
375  const T11 v11_;
376  const T12 v12_;
377};
378
379template <typename T1, typename T2, typename T3, typename T4, typename T5,
380    typename T6, typename T7, typename T8, typename T9, typename T10,
381    typename T11, typename T12, typename T13>
382class ValueArray13 {
383 public:
384  ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
385      T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
386      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
387      v12_(v12), v13_(v13) {}
388
389  template <typename T>
390  operator ParamGenerator<T>() const {
391    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
392        v12_, v13_};
393    return ValuesIn(array);
394  }
395
396 private:
397  // No implementation - assignment is unsupported.
398  void operator=(const ValueArray13& other);
399
400  const T1 v1_;
401  const T2 v2_;
402  const T3 v3_;
403  const T4 v4_;
404  const T5 v5_;
405  const T6 v6_;
406  const T7 v7_;
407  const T8 v8_;
408  const T9 v9_;
409  const T10 v10_;
410  const T11 v11_;
411  const T12 v12_;
412  const T13 v13_;
413};
414
415template <typename T1, typename T2, typename T3, typename T4, typename T5,
416    typename T6, typename T7, typename T8, typename T9, typename T10,
417    typename T11, typename T12, typename T13, typename T14>
418class ValueArray14 {
419 public:
420  ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
421      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
422      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
423      v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
424
425  template <typename T>
426  operator ParamGenerator<T>() const {
427    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
428        v12_, v13_, v14_};
429    return ValuesIn(array);
430  }
431
432 private:
433  // No implementation - assignment is unsupported.
434  void operator=(const ValueArray14& other);
435
436  const T1 v1_;
437  const T2 v2_;
438  const T3 v3_;
439  const T4 v4_;
440  const T5 v5_;
441  const T6 v6_;
442  const T7 v7_;
443  const T8 v8_;
444  const T9 v9_;
445  const T10 v10_;
446  const T11 v11_;
447  const T12 v12_;
448  const T13 v13_;
449  const T14 v14_;
450};
451
452template <typename T1, typename T2, typename T3, typename T4, typename T5,
453    typename T6, typename T7, typename T8, typename T9, typename T10,
454    typename T11, typename T12, typename T13, typename T14, typename T15>
455class ValueArray15 {
456 public:
457  ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
458      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
459      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
460      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
461
462  template <typename T>
463  operator ParamGenerator<T>() const {
464    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
465        v12_, v13_, v14_, v15_};
466    return ValuesIn(array);
467  }
468
469 private:
470  // No implementation - assignment is unsupported.
471  void operator=(const ValueArray15& other);
472
473  const T1 v1_;
474  const T2 v2_;
475  const T3 v3_;
476  const T4 v4_;
477  const T5 v5_;
478  const T6 v6_;
479  const T7 v7_;
480  const T8 v8_;
481  const T9 v9_;
482  const T10 v10_;
483  const T11 v11_;
484  const T12 v12_;
485  const T13 v13_;
486  const T14 v14_;
487  const T15 v15_;
488};
489
490template <typename T1, typename T2, typename T3, typename T4, typename T5,
491    typename T6, typename T7, typename T8, typename T9, typename T10,
492    typename T11, typename T12, typename T13, typename T14, typename T15,
493    typename T16>
494class ValueArray16 {
495 public:
496  ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
497      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
498      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
499      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
500      v16_(v16) {}
501
502  template <typename T>
503  operator ParamGenerator<T>() const {
504    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
505        v12_, v13_, v14_, v15_, v16_};
506    return ValuesIn(array);
507  }
508
509 private:
510  // No implementation - assignment is unsupported.
511  void operator=(const ValueArray16& other);
512
513  const T1 v1_;
514  const T2 v2_;
515  const T3 v3_;
516  const T4 v4_;
517  const T5 v5_;
518  const T6 v6_;
519  const T7 v7_;
520  const T8 v8_;
521  const T9 v9_;
522  const T10 v10_;
523  const T11 v11_;
524  const T12 v12_;
525  const T13 v13_;
526  const T14 v14_;
527  const T15 v15_;
528  const T16 v16_;
529};
530
531template <typename T1, typename T2, typename T3, typename T4, typename T5,
532    typename T6, typename T7, typename T8, typename T9, typename T10,
533    typename T11, typename T12, typename T13, typename T14, typename T15,
534    typename T16, typename T17>
535class ValueArray17 {
536 public:
537  ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
538      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
539      T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
540      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
541      v15_(v15), v16_(v16), v17_(v17) {}
542
543  template <typename T>
544  operator ParamGenerator<T>() const {
545    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
546        v12_, v13_, v14_, v15_, v16_, v17_};
547    return ValuesIn(array);
548  }
549
550 private:
551  // No implementation - assignment is unsupported.
552  void operator=(const ValueArray17& other);
553
554  const T1 v1_;
555  const T2 v2_;
556  const T3 v3_;
557  const T4 v4_;
558  const T5 v5_;
559  const T6 v6_;
560  const T7 v7_;
561  const T8 v8_;
562  const T9 v9_;
563  const T10 v10_;
564  const T11 v11_;
565  const T12 v12_;
566  const T13 v13_;
567  const T14 v14_;
568  const T15 v15_;
569  const T16 v16_;
570  const T17 v17_;
571};
572
573template <typename T1, typename T2, typename T3, typename T4, typename T5,
574    typename T6, typename T7, typename T8, typename T9, typename T10,
575    typename T11, typename T12, typename T13, typename T14, typename T15,
576    typename T16, typename T17, typename T18>
577class ValueArray18 {
578 public:
579  ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
580      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
581      T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
582      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
583      v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
584
585  template <typename T>
586  operator ParamGenerator<T>() const {
587    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
588        v12_, v13_, v14_, v15_, v16_, v17_, v18_};
589    return ValuesIn(array);
590  }
591
592 private:
593  // No implementation - assignment is unsupported.
594  void operator=(const ValueArray18& other);
595
596  const T1 v1_;
597  const T2 v2_;
598  const T3 v3_;
599  const T4 v4_;
600  const T5 v5_;
601  const T6 v6_;
602  const T7 v7_;
603  const T8 v8_;
604  const T9 v9_;
605  const T10 v10_;
606  const T11 v11_;
607  const T12 v12_;
608  const T13 v13_;
609  const T14 v14_;
610  const T15 v15_;
611  const T16 v16_;
612  const T17 v17_;
613  const T18 v18_;
614};
615
616template <typename T1, typename T2, typename T3, typename T4, typename T5,
617    typename T6, typename T7, typename T8, typename T9, typename T10,
618    typename T11, typename T12, typename T13, typename T14, typename T15,
619    typename T16, typename T17, typename T18, typename T19>
620class ValueArray19 {
621 public:
622  ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
623      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
624      T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
625      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
626      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
627
628  template <typename T>
629  operator ParamGenerator<T>() const {
630    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
631        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_};
632    return ValuesIn(array);
633  }
634
635 private:
636  // No implementation - assignment is unsupported.
637  void operator=(const ValueArray19& other);
638
639  const T1 v1_;
640  const T2 v2_;
641  const T3 v3_;
642  const T4 v4_;
643  const T5 v5_;
644  const T6 v6_;
645  const T7 v7_;
646  const T8 v8_;
647  const T9 v9_;
648  const T10 v10_;
649  const T11 v11_;
650  const T12 v12_;
651  const T13 v13_;
652  const T14 v14_;
653  const T15 v15_;
654  const T16 v16_;
655  const T17 v17_;
656  const T18 v18_;
657  const T19 v19_;
658};
659
660template <typename T1, typename T2, typename T3, typename T4, typename T5,
661    typename T6, typename T7, typename T8, typename T9, typename T10,
662    typename T11, typename T12, typename T13, typename T14, typename T15,
663    typename T16, typename T17, typename T18, typename T19, typename T20>
664class ValueArray20 {
665 public:
666  ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
667      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
668      T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
669      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
670      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
671      v19_(v19), v20_(v20) {}
672
673  template <typename T>
674  operator ParamGenerator<T>() const {
675    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
676        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_};
677    return ValuesIn(array);
678  }
679
680 private:
681  // No implementation - assignment is unsupported.
682  void operator=(const ValueArray20& other);
683
684  const T1 v1_;
685  const T2 v2_;
686  const T3 v3_;
687  const T4 v4_;
688  const T5 v5_;
689  const T6 v6_;
690  const T7 v7_;
691  const T8 v8_;
692  const T9 v9_;
693  const T10 v10_;
694  const T11 v11_;
695  const T12 v12_;
696  const T13 v13_;
697  const T14 v14_;
698  const T15 v15_;
699  const T16 v16_;
700  const T17 v17_;
701  const T18 v18_;
702  const T19 v19_;
703  const T20 v20_;
704};
705
706template <typename T1, typename T2, typename T3, typename T4, typename T5,
707    typename T6, typename T7, typename T8, typename T9, typename T10,
708    typename T11, typename T12, typename T13, typename T14, typename T15,
709    typename T16, typename T17, typename T18, typename T19, typename T20,
710    typename T21>
711class ValueArray21 {
712 public:
713  ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
714      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
715      T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
716      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
717      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
718      v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
719
720  template <typename T>
721  operator ParamGenerator<T>() const {
722    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
723        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_};
724    return ValuesIn(array);
725  }
726
727 private:
728  // No implementation - assignment is unsupported.
729  void operator=(const ValueArray21& other);
730
731  const T1 v1_;
732  const T2 v2_;
733  const T3 v3_;
734  const T4 v4_;
735  const T5 v5_;
736  const T6 v6_;
737  const T7 v7_;
738  const T8 v8_;
739  const T9 v9_;
740  const T10 v10_;
741  const T11 v11_;
742  const T12 v12_;
743  const T13 v13_;
744  const T14 v14_;
745  const T15 v15_;
746  const T16 v16_;
747  const T17 v17_;
748  const T18 v18_;
749  const T19 v19_;
750  const T20 v20_;
751  const T21 v21_;
752};
753
754template <typename T1, typename T2, typename T3, typename T4, typename T5,
755    typename T6, typename T7, typename T8, typename T9, typename T10,
756    typename T11, typename T12, typename T13, typename T14, typename T15,
757    typename T16, typename T17, typename T18, typename T19, typename T20,
758    typename T21, typename T22>
759class ValueArray22 {
760 public:
761  ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
762      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
763      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
764      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
765      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
766      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
767
768  template <typename T>
769  operator ParamGenerator<T>() const {
770    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
771        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_};
772    return ValuesIn(array);
773  }
774
775 private:
776  // No implementation - assignment is unsupported.
777  void operator=(const ValueArray22& other);
778
779  const T1 v1_;
780  const T2 v2_;
781  const T3 v3_;
782  const T4 v4_;
783  const T5 v5_;
784  const T6 v6_;
785  const T7 v7_;
786  const T8 v8_;
787  const T9 v9_;
788  const T10 v10_;
789  const T11 v11_;
790  const T12 v12_;
791  const T13 v13_;
792  const T14 v14_;
793  const T15 v15_;
794  const T16 v16_;
795  const T17 v17_;
796  const T18 v18_;
797  const T19 v19_;
798  const T20 v20_;
799  const T21 v21_;
800  const T22 v22_;
801};
802
803template <typename T1, typename T2, typename T3, typename T4, typename T5,
804    typename T6, typename T7, typename T8, typename T9, typename T10,
805    typename T11, typename T12, typename T13, typename T14, typename T15,
806    typename T16, typename T17, typename T18, typename T19, typename T20,
807    typename T21, typename T22, typename T23>
808class ValueArray23 {
809 public:
810  ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
811      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
812      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
813      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
814      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
815      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
816      v23_(v23) {}
817
818  template <typename T>
819  operator ParamGenerator<T>() const {
820    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
821        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_,
822        v23_};
823    return ValuesIn(array);
824  }
825
826 private:
827  // No implementation - assignment is unsupported.
828  void operator=(const ValueArray23& other);
829
830  const T1 v1_;
831  const T2 v2_;
832  const T3 v3_;
833  const T4 v4_;
834  const T5 v5_;
835  const T6 v6_;
836  const T7 v7_;
837  const T8 v8_;
838  const T9 v9_;
839  const T10 v10_;
840  const T11 v11_;
841  const T12 v12_;
842  const T13 v13_;
843  const T14 v14_;
844  const T15 v15_;
845  const T16 v16_;
846  const T17 v17_;
847  const T18 v18_;
848  const T19 v19_;
849  const T20 v20_;
850  const T21 v21_;
851  const T22 v22_;
852  const T23 v23_;
853};
854
855template <typename T1, typename T2, typename T3, typename T4, typename T5,
856    typename T6, typename T7, typename T8, typename T9, typename T10,
857    typename T11, typename T12, typename T13, typename T14, typename T15,
858    typename T16, typename T17, typename T18, typename T19, typename T20,
859    typename T21, typename T22, typename T23, typename T24>
860class ValueArray24 {
861 public:
862  ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
863      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
864      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
865      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
866      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
867      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
868      v22_(v22), v23_(v23), v24_(v24) {}
869
870  template <typename T>
871  operator ParamGenerator<T>() const {
872    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
873        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
874        v24_};
875    return ValuesIn(array);
876  }
877
878 private:
879  // No implementation - assignment is unsupported.
880  void operator=(const ValueArray24& other);
881
882  const T1 v1_;
883  const T2 v2_;
884  const T3 v3_;
885  const T4 v4_;
886  const T5 v5_;
887  const T6 v6_;
888  const T7 v7_;
889  const T8 v8_;
890  const T9 v9_;
891  const T10 v10_;
892  const T11 v11_;
893  const T12 v12_;
894  const T13 v13_;
895  const T14 v14_;
896  const T15 v15_;
897  const T16 v16_;
898  const T17 v17_;
899  const T18 v18_;
900  const T19 v19_;
901  const T20 v20_;
902  const T21 v21_;
903  const T22 v22_;
904  const T23 v23_;
905  const T24 v24_;
906};
907
908template <typename T1, typename T2, typename T3, typename T4, typename T5,
909    typename T6, typename T7, typename T8, typename T9, typename T10,
910    typename T11, typename T12, typename T13, typename T14, typename T15,
911    typename T16, typename T17, typename T18, typename T19, typename T20,
912    typename T21, typename T22, typename T23, typename T24, typename T25>
913class ValueArray25 {
914 public:
915  ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
916      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
917      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
918      T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
919      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
920      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
921      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
922
923  template <typename T>
924  operator ParamGenerator<T>() const {
925    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
926        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
927        v24_, v25_};
928    return ValuesIn(array);
929  }
930
931 private:
932  // No implementation - assignment is unsupported.
933  void operator=(const ValueArray25& other);
934
935  const T1 v1_;
936  const T2 v2_;
937  const T3 v3_;
938  const T4 v4_;
939  const T5 v5_;
940  const T6 v6_;
941  const T7 v7_;
942  const T8 v8_;
943  const T9 v9_;
944  const T10 v10_;
945  const T11 v11_;
946  const T12 v12_;
947  const T13 v13_;
948  const T14 v14_;
949  const T15 v15_;
950  const T16 v16_;
951  const T17 v17_;
952  const T18 v18_;
953  const T19 v19_;
954  const T20 v20_;
955  const T21 v21_;
956  const T22 v22_;
957  const T23 v23_;
958  const T24 v24_;
959  const T25 v25_;
960};
961
962template <typename T1, typename T2, typename T3, typename T4, typename T5,
963    typename T6, typename T7, typename T8, typename T9, typename T10,
964    typename T11, typename T12, typename T13, typename T14, typename T15,
965    typename T16, typename T17, typename T18, typename T19, typename T20,
966    typename T21, typename T22, typename T23, typename T24, typename T25,
967    typename T26>
968class ValueArray26 {
969 public:
970  ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
971      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
972      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
973      T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
974      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
975      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
976      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
977
978  template <typename T>
979  operator ParamGenerator<T>() const {
980    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
981        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
982        v24_, v25_, v26_};
983    return ValuesIn(array);
984  }
985
986 private:
987  // No implementation - assignment is unsupported.
988  void operator=(const ValueArray26& other);
989
990  const T1 v1_;
991  const T2 v2_;
992  const T3 v3_;
993  const T4 v4_;
994  const T5 v5_;
995  const T6 v6_;
996  const T7 v7_;
997  const T8 v8_;
998  const T9 v9_;
999  const T10 v10_;
1000  const T11 v11_;
1001  const T12 v12_;
1002  const T13 v13_;
1003  const T14 v14_;
1004  const T15 v15_;
1005  const T16 v16_;
1006  const T17 v17_;
1007  const T18 v18_;
1008  const T19 v19_;
1009  const T20 v20_;
1010  const T21 v21_;
1011  const T22 v22_;
1012  const T23 v23_;
1013  const T24 v24_;
1014  const T25 v25_;
1015  const T26 v26_;
1016};
1017
1018template <typename T1, typename T2, typename T3, typename T4, typename T5,
1019    typename T6, typename T7, typename T8, typename T9, typename T10,
1020    typename T11, typename T12, typename T13, typename T14, typename T15,
1021    typename T16, typename T17, typename T18, typename T19, typename T20,
1022    typename T21, typename T22, typename T23, typename T24, typename T25,
1023    typename T26, typename T27>
1024class ValueArray27 {
1025 public:
1026  ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1027      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1028      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1029      T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1030      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1031      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1032      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1033      v26_(v26), v27_(v27) {}
1034
1035  template <typename T>
1036  operator ParamGenerator<T>() const {
1037    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1038        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1039        v24_, v25_, v26_, v27_};
1040    return ValuesIn(array);
1041  }
1042
1043 private:
1044  // No implementation - assignment is unsupported.
1045  void operator=(const ValueArray27& other);
1046
1047  const T1 v1_;
1048  const T2 v2_;
1049  const T3 v3_;
1050  const T4 v4_;
1051  const T5 v5_;
1052  const T6 v6_;
1053  const T7 v7_;
1054  const T8 v8_;
1055  const T9 v9_;
1056  const T10 v10_;
1057  const T11 v11_;
1058  const T12 v12_;
1059  const T13 v13_;
1060  const T14 v14_;
1061  const T15 v15_;
1062  const T16 v16_;
1063  const T17 v17_;
1064  const T18 v18_;
1065  const T19 v19_;
1066  const T20 v20_;
1067  const T21 v21_;
1068  const T22 v22_;
1069  const T23 v23_;
1070  const T24 v24_;
1071  const T25 v25_;
1072  const T26 v26_;
1073  const T27 v27_;
1074};
1075
1076template <typename T1, typename T2, typename T3, typename T4, typename T5,
1077    typename T6, typename T7, typename T8, typename T9, typename T10,
1078    typename T11, typename T12, typename T13, typename T14, typename T15,
1079    typename T16, typename T17, typename T18, typename T19, typename T20,
1080    typename T21, typename T22, typename T23, typename T24, typename T25,
1081    typename T26, typename T27, typename T28>
1082class ValueArray28 {
1083 public:
1084  ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1085      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1086      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1087      T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1088      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1089      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1090      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1091      v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
1092
1093  template <typename T>
1094  operator ParamGenerator<T>() const {
1095    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1096        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1097        v24_, v25_, v26_, v27_, v28_};
1098    return ValuesIn(array);
1099  }
1100
1101 private:
1102  // No implementation - assignment is unsupported.
1103  void operator=(const ValueArray28& other);
1104
1105  const T1 v1_;
1106  const T2 v2_;
1107  const T3 v3_;
1108  const T4 v4_;
1109  const T5 v5_;
1110  const T6 v6_;
1111  const T7 v7_;
1112  const T8 v8_;
1113  const T9 v9_;
1114  const T10 v10_;
1115  const T11 v11_;
1116  const T12 v12_;
1117  const T13 v13_;
1118  const T14 v14_;
1119  const T15 v15_;
1120  const T16 v16_;
1121  const T17 v17_;
1122  const T18 v18_;
1123  const T19 v19_;
1124  const T20 v20_;
1125  const T21 v21_;
1126  const T22 v22_;
1127  const T23 v23_;
1128  const T24 v24_;
1129  const T25 v25_;
1130  const T26 v26_;
1131  const T27 v27_;
1132  const T28 v28_;
1133};
1134
1135template <typename T1, typename T2, typename T3, typename T4, typename T5,
1136    typename T6, typename T7, typename T8, typename T9, typename T10,
1137    typename T11, typename T12, typename T13, typename T14, typename T15,
1138    typename T16, typename T17, typename T18, typename T19, typename T20,
1139    typename T21, typename T22, typename T23, typename T24, typename T25,
1140    typename T26, typename T27, typename T28, typename T29>
1141class ValueArray29 {
1142 public:
1143  ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1144      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1145      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1146      T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1147      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1148      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1149      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1150      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
1151
1152  template <typename T>
1153  operator ParamGenerator<T>() const {
1154    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1155        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1156        v24_, v25_, v26_, v27_, v28_, v29_};
1157    return ValuesIn(array);
1158  }
1159
1160 private:
1161  // No implementation - assignment is unsupported.
1162  void operator=(const ValueArray29& other);
1163
1164  const T1 v1_;
1165  const T2 v2_;
1166  const T3 v3_;
1167  const T4 v4_;
1168  const T5 v5_;
1169  const T6 v6_;
1170  const T7 v7_;
1171  const T8 v8_;
1172  const T9 v9_;
1173  const T10 v10_;
1174  const T11 v11_;
1175  const T12 v12_;
1176  const T13 v13_;
1177  const T14 v14_;
1178  const T15 v15_;
1179  const T16 v16_;
1180  const T17 v17_;
1181  const T18 v18_;
1182  const T19 v19_;
1183  const T20 v20_;
1184  const T21 v21_;
1185  const T22 v22_;
1186  const T23 v23_;
1187  const T24 v24_;
1188  const T25 v25_;
1189  const T26 v26_;
1190  const T27 v27_;
1191  const T28 v28_;
1192  const T29 v29_;
1193};
1194
1195template <typename T1, typename T2, typename T3, typename T4, typename T5,
1196    typename T6, typename T7, typename T8, typename T9, typename T10,
1197    typename T11, typename T12, typename T13, typename T14, typename T15,
1198    typename T16, typename T17, typename T18, typename T19, typename T20,
1199    typename T21, typename T22, typename T23, typename T24, typename T25,
1200    typename T26, typename T27, typename T28, typename T29, typename T30>
1201class ValueArray30 {
1202 public:
1203  ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1204      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1205      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1206      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
1207      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1208      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1209      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1210      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1211      v29_(v29), v30_(v30) {}
1212
1213  template <typename T>
1214  operator ParamGenerator<T>() const {
1215    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1216        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1217        v24_, v25_, v26_, v27_, v28_, v29_, v30_};
1218    return ValuesIn(array);
1219  }
1220
1221 private:
1222  // No implementation - assignment is unsupported.
1223  void operator=(const ValueArray30& other);
1224
1225  const T1 v1_;
1226  const T2 v2_;
1227  const T3 v3_;
1228  const T4 v4_;
1229  const T5 v5_;
1230  const T6 v6_;
1231  const T7 v7_;
1232  const T8 v8_;
1233  const T9 v9_;
1234  const T10 v10_;
1235  const T11 v11_;
1236  const T12 v12_;
1237  const T13 v13_;
1238  const T14 v14_;
1239  const T15 v15_;
1240  const T16 v16_;
1241  const T17 v17_;
1242  const T18 v18_;
1243  const T19 v19_;
1244  const T20 v20_;
1245  const T21 v21_;
1246  const T22 v22_;
1247  const T23 v23_;
1248  const T24 v24_;
1249  const T25 v25_;
1250  const T26 v26_;
1251  const T27 v27_;
1252  const T28 v28_;
1253  const T29 v29_;
1254  const T30 v30_;
1255};
1256
1257template <typename T1, typename T2, typename T3, typename T4, typename T5,
1258    typename T6, typename T7, typename T8, typename T9, typename T10,
1259    typename T11, typename T12, typename T13, typename T14, typename T15,
1260    typename T16, typename T17, typename T18, typename T19, typename T20,
1261    typename T21, typename T22, typename T23, typename T24, typename T25,
1262    typename T26, typename T27, typename T28, typename T29, typename T30,
1263    typename T31>
1264class ValueArray31 {
1265 public:
1266  ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1267      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1268      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1269      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
1270      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1271      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1272      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1273      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1274      v29_(v29), v30_(v30), v31_(v31) {}
1275
1276  template <typename T>
1277  operator ParamGenerator<T>() const {
1278    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1279        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1280        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_};
1281    return ValuesIn(array);
1282  }
1283
1284 private:
1285  // No implementation - assignment is unsupported.
1286  void operator=(const ValueArray31& other);
1287
1288  const T1 v1_;
1289  const T2 v2_;
1290  const T3 v3_;
1291  const T4 v4_;
1292  const T5 v5_;
1293  const T6 v6_;
1294  const T7 v7_;
1295  const T8 v8_;
1296  const T9 v9_;
1297  const T10 v10_;
1298  const T11 v11_;
1299  const T12 v12_;
1300  const T13 v13_;
1301  const T14 v14_;
1302  const T15 v15_;
1303  const T16 v16_;
1304  const T17 v17_;
1305  const T18 v18_;
1306  const T19 v19_;
1307  const T20 v20_;
1308  const T21 v21_;
1309  const T22 v22_;
1310  const T23 v23_;
1311  const T24 v24_;
1312  const T25 v25_;
1313  const T26 v26_;
1314  const T27 v27_;
1315  const T28 v28_;
1316  const T29 v29_;
1317  const T30 v30_;
1318  const T31 v31_;
1319};
1320
1321template <typename T1, typename T2, typename T3, typename T4, typename T5,
1322    typename T6, typename T7, typename T8, typename T9, typename T10,
1323    typename T11, typename T12, typename T13, typename T14, typename T15,
1324    typename T16, typename T17, typename T18, typename T19, typename T20,
1325    typename T21, typename T22, typename T23, typename T24, typename T25,
1326    typename T26, typename T27, typename T28, typename T29, typename T30,
1327    typename T31, typename T32>
1328class ValueArray32 {
1329 public:
1330  ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1331      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1332      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1333      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
1334      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1335      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1336      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1337      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1338      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
1339
1340  template <typename T>
1341  operator ParamGenerator<T>() const {
1342    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1343        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1344        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_};
1345    return ValuesIn(array);
1346  }
1347
1348 private:
1349  // No implementation - assignment is unsupported.
1350  void operator=(const ValueArray32& other);
1351
1352  const T1 v1_;
1353  const T2 v2_;
1354  const T3 v3_;
1355  const T4 v4_;
1356  const T5 v5_;
1357  const T6 v6_;
1358  const T7 v7_;
1359  const T8 v8_;
1360  const T9 v9_;
1361  const T10 v10_;
1362  const T11 v11_;
1363  const T12 v12_;
1364  const T13 v13_;
1365  const T14 v14_;
1366  const T15 v15_;
1367  const T16 v16_;
1368  const T17 v17_;
1369  const T18 v18_;
1370  const T19 v19_;
1371  const T20 v20_;
1372  const T21 v21_;
1373  const T22 v22_;
1374  const T23 v23_;
1375  const T24 v24_;
1376  const T25 v25_;
1377  const T26 v26_;
1378  const T27 v27_;
1379  const T28 v28_;
1380  const T29 v29_;
1381  const T30 v30_;
1382  const T31 v31_;
1383  const T32 v32_;
1384};
1385
1386template <typename T1, typename T2, typename T3, typename T4, typename T5,
1387    typename T6, typename T7, typename T8, typename T9, typename T10,
1388    typename T11, typename T12, typename T13, typename T14, typename T15,
1389    typename T16, typename T17, typename T18, typename T19, typename T20,
1390    typename T21, typename T22, typename T23, typename T24, typename T25,
1391    typename T26, typename T27, typename T28, typename T29, typename T30,
1392    typename T31, typename T32, typename T33>
1393class ValueArray33 {
1394 public:
1395  ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1396      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1397      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1398      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
1399      T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1400      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1401      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1402      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1403      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1404      v33_(v33) {}
1405
1406  template <typename T>
1407  operator ParamGenerator<T>() const {
1408    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1409        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1410        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_};
1411    return ValuesIn(array);
1412  }
1413
1414 private:
1415  // No implementation - assignment is unsupported.
1416  void operator=(const ValueArray33& other);
1417
1418  const T1 v1_;
1419  const T2 v2_;
1420  const T3 v3_;
1421  const T4 v4_;
1422  const T5 v5_;
1423  const T6 v6_;
1424  const T7 v7_;
1425  const T8 v8_;
1426  const T9 v9_;
1427  const T10 v10_;
1428  const T11 v11_;
1429  const T12 v12_;
1430  const T13 v13_;
1431  const T14 v14_;
1432  const T15 v15_;
1433  const T16 v16_;
1434  const T17 v17_;
1435  const T18 v18_;
1436  const T19 v19_;
1437  const T20 v20_;
1438  const T21 v21_;
1439  const T22 v22_;
1440  const T23 v23_;
1441  const T24 v24_;
1442  const T25 v25_;
1443  const T26 v26_;
1444  const T27 v27_;
1445  const T28 v28_;
1446  const T29 v29_;
1447  const T30 v30_;
1448  const T31 v31_;
1449  const T32 v32_;
1450  const T33 v33_;
1451};
1452
1453template <typename T1, typename T2, typename T3, typename T4, typename T5,
1454    typename T6, typename T7, typename T8, typename T9, typename T10,
1455    typename T11, typename T12, typename T13, typename T14, typename T15,
1456    typename T16, typename T17, typename T18, typename T19, typename T20,
1457    typename T21, typename T22, typename T23, typename T24, typename T25,
1458    typename T26, typename T27, typename T28, typename T29, typename T30,
1459    typename T31, typename T32, typename T33, typename T34>
1460class ValueArray34 {
1461 public:
1462  ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1463      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1464      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1465      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1466      T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1467      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1468      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1469      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1470      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1471      v33_(v33), v34_(v34) {}
1472
1473  template <typename T>
1474  operator ParamGenerator<T>() const {
1475    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1476        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1477        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_};
1478    return ValuesIn(array);
1479  }
1480
1481 private:
1482  // No implementation - assignment is unsupported.
1483  void operator=(const ValueArray34& other);
1484
1485  const T1 v1_;
1486  const T2 v2_;
1487  const T3 v3_;
1488  const T4 v4_;
1489  const T5 v5_;
1490  const T6 v6_;
1491  const T7 v7_;
1492  const T8 v8_;
1493  const T9 v9_;
1494  const T10 v10_;
1495  const T11 v11_;
1496  const T12 v12_;
1497  const T13 v13_;
1498  const T14 v14_;
1499  const T15 v15_;
1500  const T16 v16_;
1501  const T17 v17_;
1502  const T18 v18_;
1503  const T19 v19_;
1504  const T20 v20_;
1505  const T21 v21_;
1506  const T22 v22_;
1507  const T23 v23_;
1508  const T24 v24_;
1509  const T25 v25_;
1510  const T26 v26_;
1511  const T27 v27_;
1512  const T28 v28_;
1513  const T29 v29_;
1514  const T30 v30_;
1515  const T31 v31_;
1516  const T32 v32_;
1517  const T33 v33_;
1518  const T34 v34_;
1519};
1520
1521template <typename T1, typename T2, typename T3, typename T4, typename T5,
1522    typename T6, typename T7, typename T8, typename T9, typename T10,
1523    typename T11, typename T12, typename T13, typename T14, typename T15,
1524    typename T16, typename T17, typename T18, typename T19, typename T20,
1525    typename T21, typename T22, typename T23, typename T24, typename T25,
1526    typename T26, typename T27, typename T28, typename T29, typename T30,
1527    typename T31, typename T32, typename T33, typename T34, typename T35>
1528class ValueArray35 {
1529 public:
1530  ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1531      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1532      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1533      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1534      T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
1535      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
1536      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
1537      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
1538      v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
1539      v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
1540
1541  template <typename T>
1542  operator ParamGenerator<T>() const {
1543    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1544        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1545        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_,
1546        v35_};
1547    return ValuesIn(array);
1548  }
1549
1550 private:
1551  // No implementation - assignment is unsupported.
1552  void operator=(const ValueArray35& other);
1553
1554  const T1 v1_;
1555  const T2 v2_;
1556  const T3 v3_;
1557  const T4 v4_;
1558  const T5 v5_;
1559  const T6 v6_;
1560  const T7 v7_;
1561  const T8 v8_;
1562  const T9 v9_;
1563  const T10 v10_;
1564  const T11 v11_;
1565  const T12 v12_;
1566  const T13 v13_;
1567  const T14 v14_;
1568  const T15 v15_;
1569  const T16 v16_;
1570  const T17 v17_;
1571  const T18 v18_;
1572  const T19 v19_;
1573  const T20 v20_;
1574  const T21 v21_;
1575  const T22 v22_;
1576  const T23 v23_;
1577  const T24 v24_;
1578  const T25 v25_;
1579  const T26 v26_;
1580  const T27 v27_;
1581  const T28 v28_;
1582  const T29 v29_;
1583  const T30 v30_;
1584  const T31 v31_;
1585  const T32 v32_;
1586  const T33 v33_;
1587  const T34 v34_;
1588  const T35 v35_;
1589};
1590
1591template <typename T1, typename T2, typename T3, typename T4, typename T5,
1592    typename T6, typename T7, typename T8, typename T9, typename T10,
1593    typename T11, typename T12, typename T13, typename T14, typename T15,
1594    typename T16, typename T17, typename T18, typename T19, typename T20,
1595    typename T21, typename T22, typename T23, typename T24, typename T25,
1596    typename T26, typename T27, typename T28, typename T29, typename T30,
1597    typename T31, typename T32, typename T33, typename T34, typename T35,
1598    typename T36>
1599class ValueArray36 {
1600 public:
1601  ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1602      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1603      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1604      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1605      T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
1606      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
1607      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
1608      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
1609      v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
1610      v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
1611
1612  template <typename T>
1613  operator ParamGenerator<T>() const {
1614    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1615        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1616        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1617        v36_};
1618    return ValuesIn(array);
1619  }
1620
1621 private:
1622  // No implementation - assignment is unsupported.
1623  void operator=(const ValueArray36& other);
1624
1625  const T1 v1_;
1626  const T2 v2_;
1627  const T3 v3_;
1628  const T4 v4_;
1629  const T5 v5_;
1630  const T6 v6_;
1631  const T7 v7_;
1632  const T8 v8_;
1633  const T9 v9_;
1634  const T10 v10_;
1635  const T11 v11_;
1636  const T12 v12_;
1637  const T13 v13_;
1638  const T14 v14_;
1639  const T15 v15_;
1640  const T16 v16_;
1641  const T17 v17_;
1642  const T18 v18_;
1643  const T19 v19_;
1644  const T20 v20_;
1645  const T21 v21_;
1646  const T22 v22_;
1647  const T23 v23_;
1648  const T24 v24_;
1649  const T25 v25_;
1650  const T26 v26_;
1651  const T27 v27_;
1652  const T28 v28_;
1653  const T29 v29_;
1654  const T30 v30_;
1655  const T31 v31_;
1656  const T32 v32_;
1657  const T33 v33_;
1658  const T34 v34_;
1659  const T35 v35_;
1660  const T36 v36_;
1661};
1662
1663template <typename T1, typename T2, typename T3, typename T4, typename T5,
1664    typename T6, typename T7, typename T8, typename T9, typename T10,
1665    typename T11, typename T12, typename T13, typename T14, typename T15,
1666    typename T16, typename T17, typename T18, typename T19, typename T20,
1667    typename T21, typename T22, typename T23, typename T24, typename T25,
1668    typename T26, typename T27, typename T28, typename T29, typename T30,
1669    typename T31, typename T32, typename T33, typename T34, typename T35,
1670    typename T36, typename T37>
1671class ValueArray37 {
1672 public:
1673  ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1674      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1675      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1676      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1677      T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
1678      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
1679      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
1680      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
1681      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
1682      v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
1683      v36_(v36), v37_(v37) {}
1684
1685  template <typename T>
1686  operator ParamGenerator<T>() const {
1687    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1688        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1689        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1690        v36_, v37_};
1691    return ValuesIn(array);
1692  }
1693
1694 private:
1695  // No implementation - assignment is unsupported.
1696  void operator=(const ValueArray37& other);
1697
1698  const T1 v1_;
1699  const T2 v2_;
1700  const T3 v3_;
1701  const T4 v4_;
1702  const T5 v5_;
1703  const T6 v6_;
1704  const T7 v7_;
1705  const T8 v8_;
1706  const T9 v9_;
1707  const T10 v10_;
1708  const T11 v11_;
1709  const T12 v12_;
1710  const T13 v13_;
1711  const T14 v14_;
1712  const T15 v15_;
1713  const T16 v16_;
1714  const T17 v17_;
1715  const T18 v18_;
1716  const T19 v19_;
1717  const T20 v20_;
1718  const T21 v21_;
1719  const T22 v22_;
1720  const T23 v23_;
1721  const T24 v24_;
1722  const T25 v25_;
1723  const T26 v26_;
1724  const T27 v27_;
1725  const T28 v28_;
1726  const T29 v29_;
1727  const T30 v30_;
1728  const T31 v31_;
1729  const T32 v32_;
1730  const T33 v33_;
1731  const T34 v34_;
1732  const T35 v35_;
1733  const T36 v36_;
1734  const T37 v37_;
1735};
1736
1737template <typename T1, typename T2, typename T3, typename T4, typename T5,
1738    typename T6, typename T7, typename T8, typename T9, typename T10,
1739    typename T11, typename T12, typename T13, typename T14, typename T15,
1740    typename T16, typename T17, typename T18, typename T19, typename T20,
1741    typename T21, typename T22, typename T23, typename T24, typename T25,
1742    typename T26, typename T27, typename T28, typename T29, typename T30,
1743    typename T31, typename T32, typename T33, typename T34, typename T35,
1744    typename T36, typename T37, typename T38>
1745class ValueArray38 {
1746 public:
1747  ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1748      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1749      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1750      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1751      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
1752      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1753      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1754      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1755      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1756      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1757      v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
1758
1759  template <typename T>
1760  operator ParamGenerator<T>() const {
1761    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1762        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1763        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1764        v36_, v37_, v38_};
1765    return ValuesIn(array);
1766  }
1767
1768 private:
1769  // No implementation - assignment is unsupported.
1770  void operator=(const ValueArray38& other);
1771
1772  const T1 v1_;
1773  const T2 v2_;
1774  const T3 v3_;
1775  const T4 v4_;
1776  const T5 v5_;
1777  const T6 v6_;
1778  const T7 v7_;
1779  const T8 v8_;
1780  const T9 v9_;
1781  const T10 v10_;
1782  const T11 v11_;
1783  const T12 v12_;
1784  const T13 v13_;
1785  const T14 v14_;
1786  const T15 v15_;
1787  const T16 v16_;
1788  const T17 v17_;
1789  const T18 v18_;
1790  const T19 v19_;
1791  const T20 v20_;
1792  const T21 v21_;
1793  const T22 v22_;
1794  const T23 v23_;
1795  const T24 v24_;
1796  const T25 v25_;
1797  const T26 v26_;
1798  const T27 v27_;
1799  const T28 v28_;
1800  const T29 v29_;
1801  const T30 v30_;
1802  const T31 v31_;
1803  const T32 v32_;
1804  const T33 v33_;
1805  const T34 v34_;
1806  const T35 v35_;
1807  const T36 v36_;
1808  const T37 v37_;
1809  const T38 v38_;
1810};
1811
1812template <typename T1, typename T2, typename T3, typename T4, typename T5,
1813    typename T6, typename T7, typename T8, typename T9, typename T10,
1814    typename T11, typename T12, typename T13, typename T14, typename T15,
1815    typename T16, typename T17, typename T18, typename T19, typename T20,
1816    typename T21, typename T22, typename T23, typename T24, typename T25,
1817    typename T26, typename T27, typename T28, typename T29, typename T30,
1818    typename T31, typename T32, typename T33, typename T34, typename T35,
1819    typename T36, typename T37, typename T38, typename T39>
1820class ValueArray39 {
1821 public:
1822  ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1823      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1824      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1825      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1826      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
1827      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
1828      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
1829      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
1830      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
1831      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
1832      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
1833
1834  template <typename T>
1835  operator ParamGenerator<T>() const {
1836    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1837        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1838        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1839        v36_, v37_, v38_, v39_};
1840    return ValuesIn(array);
1841  }
1842
1843 private:
1844  // No implementation - assignment is unsupported.
1845  void operator=(const ValueArray39& other);
1846
1847  const T1 v1_;
1848  const T2 v2_;
1849  const T3 v3_;
1850  const T4 v4_;
1851  const T5 v5_;
1852  const T6 v6_;
1853  const T7 v7_;
1854  const T8 v8_;
1855  const T9 v9_;
1856  const T10 v10_;
1857  const T11 v11_;
1858  const T12 v12_;
1859  const T13 v13_;
1860  const T14 v14_;
1861  const T15 v15_;
1862  const T16 v16_;
1863  const T17 v17_;
1864  const T18 v18_;
1865  const T19 v19_;
1866  const T20 v20_;
1867  const T21 v21_;
1868  const T22 v22_;
1869  const T23 v23_;
1870  const T24 v24_;
1871  const T25 v25_;
1872  const T26 v26_;
1873  const T27 v27_;
1874  const T28 v28_;
1875  const T29 v29_;
1876  const T30 v30_;
1877  const T31 v31_;
1878  const T32 v32_;
1879  const T33 v33_;
1880  const T34 v34_;
1881  const T35 v35_;
1882  const T36 v36_;
1883  const T37 v37_;
1884  const T38 v38_;
1885  const T39 v39_;
1886};
1887
1888template <typename T1, typename T2, typename T3, typename T4, typename T5,
1889    typename T6, typename T7, typename T8, typename T9, typename T10,
1890    typename T11, typename T12, typename T13, typename T14, typename T15,
1891    typename T16, typename T17, typename T18, typename T19, typename T20,
1892    typename T21, typename T22, typename T23, typename T24, typename T25,
1893    typename T26, typename T27, typename T28, typename T29, typename T30,
1894    typename T31, typename T32, typename T33, typename T34, typename T35,
1895    typename T36, typename T37, typename T38, typename T39, typename T40>
1896class ValueArray40 {
1897 public:
1898  ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1899      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1900      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1901      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1902      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
1903      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
1904      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
1905      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
1906      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
1907      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
1908      v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
1909      v40_(v40) {}
1910
1911  template <typename T>
1912  operator ParamGenerator<T>() const {
1913    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1914        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1915        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1916        v36_, v37_, v38_, v39_, v40_};
1917    return ValuesIn(array);
1918  }
1919
1920 private:
1921  // No implementation - assignment is unsupported.
1922  void operator=(const ValueArray40& other);
1923
1924  const T1 v1_;
1925  const T2 v2_;
1926  const T3 v3_;
1927  const T4 v4_;
1928  const T5 v5_;
1929  const T6 v6_;
1930  const T7 v7_;
1931  const T8 v8_;
1932  const T9 v9_;
1933  const T10 v10_;
1934  const T11 v11_;
1935  const T12 v12_;
1936  const T13 v13_;
1937  const T14 v14_;
1938  const T15 v15_;
1939  const T16 v16_;
1940  const T17 v17_;
1941  const T18 v18_;
1942  const T19 v19_;
1943  const T20 v20_;
1944  const T21 v21_;
1945  const T22 v22_;
1946  const T23 v23_;
1947  const T24 v24_;
1948  const T25 v25_;
1949  const T26 v26_;
1950  const T27 v27_;
1951  const T28 v28_;
1952  const T29 v29_;
1953  const T30 v30_;
1954  const T31 v31_;
1955  const T32 v32_;
1956  const T33 v33_;
1957  const T34 v34_;
1958  const T35 v35_;
1959  const T36 v36_;
1960  const T37 v37_;
1961  const T38 v38_;
1962  const T39 v39_;
1963  const T40 v40_;
1964};
1965
1966template <typename T1, typename T2, typename T3, typename T4, typename T5,
1967    typename T6, typename T7, typename T8, typename T9, typename T10,
1968    typename T11, typename T12, typename T13, typename T14, typename T15,
1969    typename T16, typename T17, typename T18, typename T19, typename T20,
1970    typename T21, typename T22, typename T23, typename T24, typename T25,
1971    typename T26, typename T27, typename T28, typename T29, typename T30,
1972    typename T31, typename T32, typename T33, typename T34, typename T35,
1973    typename T36, typename T37, typename T38, typename T39, typename T40,
1974    typename T41>
1975class ValueArray41 {
1976 public:
1977  ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
1978      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
1979      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
1980      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
1981      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
1982      T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
1983      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
1984      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
1985      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
1986      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
1987      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
1988      v39_(v39), v40_(v40), v41_(v41) {}
1989
1990  template <typename T>
1991  operator ParamGenerator<T>() const {
1992    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
1993        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
1994        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
1995        v36_, v37_, v38_, v39_, v40_, v41_};
1996    return ValuesIn(array);
1997  }
1998
1999 private:
2000  // No implementation - assignment is unsupported.
2001  void operator=(const ValueArray41& other);
2002
2003  const T1 v1_;
2004  const T2 v2_;
2005  const T3 v3_;
2006  const T4 v4_;
2007  const T5 v5_;
2008  const T6 v6_;
2009  const T7 v7_;
2010  const T8 v8_;
2011  const T9 v9_;
2012  const T10 v10_;
2013  const T11 v11_;
2014  const T12 v12_;
2015  const T13 v13_;
2016  const T14 v14_;
2017  const T15 v15_;
2018  const T16 v16_;
2019  const T17 v17_;
2020  const T18 v18_;
2021  const T19 v19_;
2022  const T20 v20_;
2023  const T21 v21_;
2024  const T22 v22_;
2025  const T23 v23_;
2026  const T24 v24_;
2027  const T25 v25_;
2028  const T26 v26_;
2029  const T27 v27_;
2030  const T28 v28_;
2031  const T29 v29_;
2032  const T30 v30_;
2033  const T31 v31_;
2034  const T32 v32_;
2035  const T33 v33_;
2036  const T34 v34_;
2037  const T35 v35_;
2038  const T36 v36_;
2039  const T37 v37_;
2040  const T38 v38_;
2041  const T39 v39_;
2042  const T40 v40_;
2043  const T41 v41_;
2044};
2045
2046template <typename T1, typename T2, typename T3, typename T4, typename T5,
2047    typename T6, typename T7, typename T8, typename T9, typename T10,
2048    typename T11, typename T12, typename T13, typename T14, typename T15,
2049    typename T16, typename T17, typename T18, typename T19, typename T20,
2050    typename T21, typename T22, typename T23, typename T24, typename T25,
2051    typename T26, typename T27, typename T28, typename T29, typename T30,
2052    typename T31, typename T32, typename T33, typename T34, typename T35,
2053    typename T36, typename T37, typename T38, typename T39, typename T40,
2054    typename T41, typename T42>
2055class ValueArray42 {
2056 public:
2057  ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2058      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2059      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2060      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2061      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2062      T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2063      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2064      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2065      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2066      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2067      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2068      v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
2069
2070  template <typename T>
2071  operator ParamGenerator<T>() const {
2072    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2073        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2074        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2075        v36_, v37_, v38_, v39_, v40_, v41_, v42_};
2076    return ValuesIn(array);
2077  }
2078
2079 private:
2080  // No implementation - assignment is unsupported.
2081  void operator=(const ValueArray42& other);
2082
2083  const T1 v1_;
2084  const T2 v2_;
2085  const T3 v3_;
2086  const T4 v4_;
2087  const T5 v5_;
2088  const T6 v6_;
2089  const T7 v7_;
2090  const T8 v8_;
2091  const T9 v9_;
2092  const T10 v10_;
2093  const T11 v11_;
2094  const T12 v12_;
2095  const T13 v13_;
2096  const T14 v14_;
2097  const T15 v15_;
2098  const T16 v16_;
2099  const T17 v17_;
2100  const T18 v18_;
2101  const T19 v19_;
2102  const T20 v20_;
2103  const T21 v21_;
2104  const T22 v22_;
2105  const T23 v23_;
2106  const T24 v24_;
2107  const T25 v25_;
2108  const T26 v26_;
2109  const T27 v27_;
2110  const T28 v28_;
2111  const T29 v29_;
2112  const T30 v30_;
2113  const T31 v31_;
2114  const T32 v32_;
2115  const T33 v33_;
2116  const T34 v34_;
2117  const T35 v35_;
2118  const T36 v36_;
2119  const T37 v37_;
2120  const T38 v38_;
2121  const T39 v39_;
2122  const T40 v40_;
2123  const T41 v41_;
2124  const T42 v42_;
2125};
2126
2127template <typename T1, typename T2, typename T3, typename T4, typename T5,
2128    typename T6, typename T7, typename T8, typename T9, typename T10,
2129    typename T11, typename T12, typename T13, typename T14, typename T15,
2130    typename T16, typename T17, typename T18, typename T19, typename T20,
2131    typename T21, typename T22, typename T23, typename T24, typename T25,
2132    typename T26, typename T27, typename T28, typename T29, typename T30,
2133    typename T31, typename T32, typename T33, typename T34, typename T35,
2134    typename T36, typename T37, typename T38, typename T39, typename T40,
2135    typename T41, typename T42, typename T43>
2136class ValueArray43 {
2137 public:
2138  ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2139      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2140      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2141      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2142      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2143      T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
2144      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
2145      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
2146      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
2147      v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
2148      v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
2149      v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
2150
2151  template <typename T>
2152  operator ParamGenerator<T>() const {
2153    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2154        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2155        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2156        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_};
2157    return ValuesIn(array);
2158  }
2159
2160 private:
2161  // No implementation - assignment is unsupported.
2162  void operator=(const ValueArray43& other);
2163
2164  const T1 v1_;
2165  const T2 v2_;
2166  const T3 v3_;
2167  const T4 v4_;
2168  const T5 v5_;
2169  const T6 v6_;
2170  const T7 v7_;
2171  const T8 v8_;
2172  const T9 v9_;
2173  const T10 v10_;
2174  const T11 v11_;
2175  const T12 v12_;
2176  const T13 v13_;
2177  const T14 v14_;
2178  const T15 v15_;
2179  const T16 v16_;
2180  const T17 v17_;
2181  const T18 v18_;
2182  const T19 v19_;
2183  const T20 v20_;
2184  const T21 v21_;
2185  const T22 v22_;
2186  const T23 v23_;
2187  const T24 v24_;
2188  const T25 v25_;
2189  const T26 v26_;
2190  const T27 v27_;
2191  const T28 v28_;
2192  const T29 v29_;
2193  const T30 v30_;
2194  const T31 v31_;
2195  const T32 v32_;
2196  const T33 v33_;
2197  const T34 v34_;
2198  const T35 v35_;
2199  const T36 v36_;
2200  const T37 v37_;
2201  const T38 v38_;
2202  const T39 v39_;
2203  const T40 v40_;
2204  const T41 v41_;
2205  const T42 v42_;
2206  const T43 v43_;
2207};
2208
2209template <typename T1, typename T2, typename T3, typename T4, typename T5,
2210    typename T6, typename T7, typename T8, typename T9, typename T10,
2211    typename T11, typename T12, typename T13, typename T14, typename T15,
2212    typename T16, typename T17, typename T18, typename T19, typename T20,
2213    typename T21, typename T22, typename T23, typename T24, typename T25,
2214    typename T26, typename T27, typename T28, typename T29, typename T30,
2215    typename T31, typename T32, typename T33, typename T34, typename T35,
2216    typename T36, typename T37, typename T38, typename T39, typename T40,
2217    typename T41, typename T42, typename T43, typename T44>
2218class ValueArray44 {
2219 public:
2220  ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2221      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2222      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2223      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2224      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2225      T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
2226      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
2227      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
2228      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
2229      v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
2230      v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
2231      v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
2232      v43_(v43), v44_(v44) {}
2233
2234  template <typename T>
2235  operator ParamGenerator<T>() const {
2236    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2237        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2238        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2239        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_};
2240    return ValuesIn(array);
2241  }
2242
2243 private:
2244  // No implementation - assignment is unsupported.
2245  void operator=(const ValueArray44& other);
2246
2247  const T1 v1_;
2248  const T2 v2_;
2249  const T3 v3_;
2250  const T4 v4_;
2251  const T5 v5_;
2252  const T6 v6_;
2253  const T7 v7_;
2254  const T8 v8_;
2255  const T9 v9_;
2256  const T10 v10_;
2257  const T11 v11_;
2258  const T12 v12_;
2259  const T13 v13_;
2260  const T14 v14_;
2261  const T15 v15_;
2262  const T16 v16_;
2263  const T17 v17_;
2264  const T18 v18_;
2265  const T19 v19_;
2266  const T20 v20_;
2267  const T21 v21_;
2268  const T22 v22_;
2269  const T23 v23_;
2270  const T24 v24_;
2271  const T25 v25_;
2272  const T26 v26_;
2273  const T27 v27_;
2274  const T28 v28_;
2275  const T29 v29_;
2276  const T30 v30_;
2277  const T31 v31_;
2278  const T32 v32_;
2279  const T33 v33_;
2280  const T34 v34_;
2281  const T35 v35_;
2282  const T36 v36_;
2283  const T37 v37_;
2284  const T38 v38_;
2285  const T39 v39_;
2286  const T40 v40_;
2287  const T41 v41_;
2288  const T42 v42_;
2289  const T43 v43_;
2290  const T44 v44_;
2291};
2292
2293template <typename T1, typename T2, typename T3, typename T4, typename T5,
2294    typename T6, typename T7, typename T8, typename T9, typename T10,
2295    typename T11, typename T12, typename T13, typename T14, typename T15,
2296    typename T16, typename T17, typename T18, typename T19, typename T20,
2297    typename T21, typename T22, typename T23, typename T24, typename T25,
2298    typename T26, typename T27, typename T28, typename T29, typename T30,
2299    typename T31, typename T32, typename T33, typename T34, typename T35,
2300    typename T36, typename T37, typename T38, typename T39, typename T40,
2301    typename T41, typename T42, typename T43, typename T44, typename T45>
2302class ValueArray45 {
2303 public:
2304  ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2305      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2306      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2307      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2308      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2309      T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
2310      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
2311      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
2312      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
2313      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
2314      v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
2315      v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
2316      v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
2317
2318  template <typename T>
2319  operator ParamGenerator<T>() const {
2320    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2321        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2322        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2323        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_};
2324    return ValuesIn(array);
2325  }
2326
2327 private:
2328  // No implementation - assignment is unsupported.
2329  void operator=(const ValueArray45& other);
2330
2331  const T1 v1_;
2332  const T2 v2_;
2333  const T3 v3_;
2334  const T4 v4_;
2335  const T5 v5_;
2336  const T6 v6_;
2337  const T7 v7_;
2338  const T8 v8_;
2339  const T9 v9_;
2340  const T10 v10_;
2341  const T11 v11_;
2342  const T12 v12_;
2343  const T13 v13_;
2344  const T14 v14_;
2345  const T15 v15_;
2346  const T16 v16_;
2347  const T17 v17_;
2348  const T18 v18_;
2349  const T19 v19_;
2350  const T20 v20_;
2351  const T21 v21_;
2352  const T22 v22_;
2353  const T23 v23_;
2354  const T24 v24_;
2355  const T25 v25_;
2356  const T26 v26_;
2357  const T27 v27_;
2358  const T28 v28_;
2359  const T29 v29_;
2360  const T30 v30_;
2361  const T31 v31_;
2362  const T32 v32_;
2363  const T33 v33_;
2364  const T34 v34_;
2365  const T35 v35_;
2366  const T36 v36_;
2367  const T37 v37_;
2368  const T38 v38_;
2369  const T39 v39_;
2370  const T40 v40_;
2371  const T41 v41_;
2372  const T42 v42_;
2373  const T43 v43_;
2374  const T44 v44_;
2375  const T45 v45_;
2376};
2377
2378template <typename T1, typename T2, typename T3, typename T4, typename T5,
2379    typename T6, typename T7, typename T8, typename T9, typename T10,
2380    typename T11, typename T12, typename T13, typename T14, typename T15,
2381    typename T16, typename T17, typename T18, typename T19, typename T20,
2382    typename T21, typename T22, typename T23, typename T24, typename T25,
2383    typename T26, typename T27, typename T28, typename T29, typename T30,
2384    typename T31, typename T32, typename T33, typename T34, typename T35,
2385    typename T36, typename T37, typename T38, typename T39, typename T40,
2386    typename T41, typename T42, typename T43, typename T44, typename T45,
2387    typename T46>
2388class ValueArray46 {
2389 public:
2390  ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2391      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2392      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2393      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2394      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2395      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
2396      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2397      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2398      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2399      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2400      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2401      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2402      v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
2403
2404  template <typename T>
2405  operator ParamGenerator<T>() const {
2406    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2407        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2408        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2409        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_};
2410    return ValuesIn(array);
2411  }
2412
2413 private:
2414  // No implementation - assignment is unsupported.
2415  void operator=(const ValueArray46& other);
2416
2417  const T1 v1_;
2418  const T2 v2_;
2419  const T3 v3_;
2420  const T4 v4_;
2421  const T5 v5_;
2422  const T6 v6_;
2423  const T7 v7_;
2424  const T8 v8_;
2425  const T9 v9_;
2426  const T10 v10_;
2427  const T11 v11_;
2428  const T12 v12_;
2429  const T13 v13_;
2430  const T14 v14_;
2431  const T15 v15_;
2432  const T16 v16_;
2433  const T17 v17_;
2434  const T18 v18_;
2435  const T19 v19_;
2436  const T20 v20_;
2437  const T21 v21_;
2438  const T22 v22_;
2439  const T23 v23_;
2440  const T24 v24_;
2441  const T25 v25_;
2442  const T26 v26_;
2443  const T27 v27_;
2444  const T28 v28_;
2445  const T29 v29_;
2446  const T30 v30_;
2447  const T31 v31_;
2448  const T32 v32_;
2449  const T33 v33_;
2450  const T34 v34_;
2451  const T35 v35_;
2452  const T36 v36_;
2453  const T37 v37_;
2454  const T38 v38_;
2455  const T39 v39_;
2456  const T40 v40_;
2457  const T41 v41_;
2458  const T42 v42_;
2459  const T43 v43_;
2460  const T44 v44_;
2461  const T45 v45_;
2462  const T46 v46_;
2463};
2464
2465template <typename T1, typename T2, typename T3, typename T4, typename T5,
2466    typename T6, typename T7, typename T8, typename T9, typename T10,
2467    typename T11, typename T12, typename T13, typename T14, typename T15,
2468    typename T16, typename T17, typename T18, typename T19, typename T20,
2469    typename T21, typename T22, typename T23, typename T24, typename T25,
2470    typename T26, typename T27, typename T28, typename T29, typename T30,
2471    typename T31, typename T32, typename T33, typename T34, typename T35,
2472    typename T36, typename T37, typename T38, typename T39, typename T40,
2473    typename T41, typename T42, typename T43, typename T44, typename T45,
2474    typename T46, typename T47>
2475class ValueArray47 {
2476 public:
2477  ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2478      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2479      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2480      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2481      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2482      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
2483      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
2484      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
2485      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
2486      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
2487      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
2488      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
2489      v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
2490      v47_(v47) {}
2491
2492  template <typename T>
2493  operator ParamGenerator<T>() const {
2494    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2495        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2496        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2497        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_,
2498        v47_};
2499    return ValuesIn(array);
2500  }
2501
2502 private:
2503  // No implementation - assignment is unsupported.
2504  void operator=(const ValueArray47& other);
2505
2506  const T1 v1_;
2507  const T2 v2_;
2508  const T3 v3_;
2509  const T4 v4_;
2510  const T5 v5_;
2511  const T6 v6_;
2512  const T7 v7_;
2513  const T8 v8_;
2514  const T9 v9_;
2515  const T10 v10_;
2516  const T11 v11_;
2517  const T12 v12_;
2518  const T13 v13_;
2519  const T14 v14_;
2520  const T15 v15_;
2521  const T16 v16_;
2522  const T17 v17_;
2523  const T18 v18_;
2524  const T19 v19_;
2525  const T20 v20_;
2526  const T21 v21_;
2527  const T22 v22_;
2528  const T23 v23_;
2529  const T24 v24_;
2530  const T25 v25_;
2531  const T26 v26_;
2532  const T27 v27_;
2533  const T28 v28_;
2534  const T29 v29_;
2535  const T30 v30_;
2536  const T31 v31_;
2537  const T32 v32_;
2538  const T33 v33_;
2539  const T34 v34_;
2540  const T35 v35_;
2541  const T36 v36_;
2542  const T37 v37_;
2543  const T38 v38_;
2544  const T39 v39_;
2545  const T40 v40_;
2546  const T41 v41_;
2547  const T42 v42_;
2548  const T43 v43_;
2549  const T44 v44_;
2550  const T45 v45_;
2551  const T46 v46_;
2552  const T47 v47_;
2553};
2554
2555template <typename T1, typename T2, typename T3, typename T4, typename T5,
2556    typename T6, typename T7, typename T8, typename T9, typename T10,
2557    typename T11, typename T12, typename T13, typename T14, typename T15,
2558    typename T16, typename T17, typename T18, typename T19, typename T20,
2559    typename T21, typename T22, typename T23, typename T24, typename T25,
2560    typename T26, typename T27, typename T28, typename T29, typename T30,
2561    typename T31, typename T32, typename T33, typename T34, typename T35,
2562    typename T36, typename T37, typename T38, typename T39, typename T40,
2563    typename T41, typename T42, typename T43, typename T44, typename T45,
2564    typename T46, typename T47, typename T48>
2565class ValueArray48 {
2566 public:
2567  ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2568      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2569      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2570      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2571      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2572      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
2573      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
2574      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
2575      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
2576      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
2577      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
2578      v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
2579      v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
2580      v46_(v46), v47_(v47), v48_(v48) {}
2581
2582  template <typename T>
2583  operator ParamGenerator<T>() const {
2584    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2585        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2586        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2587        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2588        v48_};
2589    return ValuesIn(array);
2590  }
2591
2592 private:
2593  // No implementation - assignment is unsupported.
2594  void operator=(const ValueArray48& other);
2595
2596  const T1 v1_;
2597  const T2 v2_;
2598  const T3 v3_;
2599  const T4 v4_;
2600  const T5 v5_;
2601  const T6 v6_;
2602  const T7 v7_;
2603  const T8 v8_;
2604  const T9 v9_;
2605  const T10 v10_;
2606  const T11 v11_;
2607  const T12 v12_;
2608  const T13 v13_;
2609  const T14 v14_;
2610  const T15 v15_;
2611  const T16 v16_;
2612  const T17 v17_;
2613  const T18 v18_;
2614  const T19 v19_;
2615  const T20 v20_;
2616  const T21 v21_;
2617  const T22 v22_;
2618  const T23 v23_;
2619  const T24 v24_;
2620  const T25 v25_;
2621  const T26 v26_;
2622  const T27 v27_;
2623  const T28 v28_;
2624  const T29 v29_;
2625  const T30 v30_;
2626  const T31 v31_;
2627  const T32 v32_;
2628  const T33 v33_;
2629  const T34 v34_;
2630  const T35 v35_;
2631  const T36 v36_;
2632  const T37 v37_;
2633  const T38 v38_;
2634  const T39 v39_;
2635  const T40 v40_;
2636  const T41 v41_;
2637  const T42 v42_;
2638  const T43 v43_;
2639  const T44 v44_;
2640  const T45 v45_;
2641  const T46 v46_;
2642  const T47 v47_;
2643  const T48 v48_;
2644};
2645
2646template <typename T1, typename T2, typename T3, typename T4, typename T5,
2647    typename T6, typename T7, typename T8, typename T9, typename T10,
2648    typename T11, typename T12, typename T13, typename T14, typename T15,
2649    typename T16, typename T17, typename T18, typename T19, typename T20,
2650    typename T21, typename T22, typename T23, typename T24, typename T25,
2651    typename T26, typename T27, typename T28, typename T29, typename T30,
2652    typename T31, typename T32, typename T33, typename T34, typename T35,
2653    typename T36, typename T37, typename T38, typename T39, typename T40,
2654    typename T41, typename T42, typename T43, typename T44, typename T45,
2655    typename T46, typename T47, typename T48, typename T49>
2656class ValueArray49 {
2657 public:
2658  ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2659      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2660      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2661      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2662      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2663      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
2664      T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2665      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2666      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2667      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2668      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2669      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2670      v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2671      v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
2672
2673  template <typename T>
2674  operator ParamGenerator<T>() const {
2675    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2676        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2677        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2678        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2679        v48_, v49_};
2680    return ValuesIn(array);
2681  }
2682
2683 private:
2684  // No implementation - assignment is unsupported.
2685  void operator=(const ValueArray49& other);
2686
2687  const T1 v1_;
2688  const T2 v2_;
2689  const T3 v3_;
2690  const T4 v4_;
2691  const T5 v5_;
2692  const T6 v6_;
2693  const T7 v7_;
2694  const T8 v8_;
2695  const T9 v9_;
2696  const T10 v10_;
2697  const T11 v11_;
2698  const T12 v12_;
2699  const T13 v13_;
2700  const T14 v14_;
2701  const T15 v15_;
2702  const T16 v16_;
2703  const T17 v17_;
2704  const T18 v18_;
2705  const T19 v19_;
2706  const T20 v20_;
2707  const T21 v21_;
2708  const T22 v22_;
2709  const T23 v23_;
2710  const T24 v24_;
2711  const T25 v25_;
2712  const T26 v26_;
2713  const T27 v27_;
2714  const T28 v28_;
2715  const T29 v29_;
2716  const T30 v30_;
2717  const T31 v31_;
2718  const T32 v32_;
2719  const T33 v33_;
2720  const T34 v34_;
2721  const T35 v35_;
2722  const T36 v36_;
2723  const T37 v37_;
2724  const T38 v38_;
2725  const T39 v39_;
2726  const T40 v40_;
2727  const T41 v41_;
2728  const T42 v42_;
2729  const T43 v43_;
2730  const T44 v44_;
2731  const T45 v45_;
2732  const T46 v46_;
2733  const T47 v47_;
2734  const T48 v48_;
2735  const T49 v49_;
2736};
2737
2738template <typename T1, typename T2, typename T3, typename T4, typename T5,
2739    typename T6, typename T7, typename T8, typename T9, typename T10,
2740    typename T11, typename T12, typename T13, typename T14, typename T15,
2741    typename T16, typename T17, typename T18, typename T19, typename T20,
2742    typename T21, typename T22, typename T23, typename T24, typename T25,
2743    typename T26, typename T27, typename T28, typename T29, typename T30,
2744    typename T31, typename T32, typename T33, typename T34, typename T35,
2745    typename T36, typename T37, typename T38, typename T39, typename T40,
2746    typename T41, typename T42, typename T43, typename T44, typename T45,
2747    typename T46, typename T47, typename T48, typename T49, typename T50>
2748class ValueArray50 {
2749 public:
2750  ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2751      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2752      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2753      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2754      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2755      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
2756      T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
2757      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
2758      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
2759      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
2760      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
2761      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
2762      v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
2763      v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
2764
2765  template <typename T>
2766  operator ParamGenerator<T>() const {
2767    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
2768        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
2769        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
2770        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
2771        v48_, v49_, v50_};
2772    return ValuesIn(array);
2773  }
2774
2775 private:
2776  // No implementation - assignment is unsupported.
2777  void operator=(const ValueArray50& other);
2778
2779  const T1 v1_;
2780  const T2 v2_;
2781  const T3 v3_;
2782  const T4 v4_;
2783  const T5 v5_;
2784  const T6 v6_;
2785  const T7 v7_;
2786  const T8 v8_;
2787  const T9 v9_;
2788  const T10 v10_;
2789  const T11 v11_;
2790  const T12 v12_;
2791  const T13 v13_;
2792  const T14 v14_;
2793  const T15 v15_;
2794  const T16 v16_;
2795  const T17 v17_;
2796  const T18 v18_;
2797  const T19 v19_;
2798  const T20 v20_;
2799  const T21 v21_;
2800  const T22 v22_;
2801  const T23 v23_;
2802  const T24 v24_;
2803  const T25 v25_;
2804  const T26 v26_;
2805  const T27 v27_;
2806  const T28 v28_;
2807  const T29 v29_;
2808  const T30 v30_;
2809  const T31 v31_;
2810  const T32 v32_;
2811  const T33 v33_;
2812  const T34 v34_;
2813  const T35 v35_;
2814  const T36 v36_;
2815  const T37 v37_;
2816  const T38 v38_;
2817  const T39 v39_;
2818  const T40 v40_;
2819  const T41 v41_;
2820  const T42 v42_;
2821  const T43 v43_;
2822  const T44 v44_;
2823  const T45 v45_;
2824  const T46 v46_;
2825  const T47 v47_;
2826  const T48 v48_;
2827  const T49 v49_;
2828  const T50 v50_;
2829};
2830
2831# if GTEST_HAS_COMBINE
2832// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
2833//
2834// Generates values from the Cartesian product of values produced
2835// by the argument generators.
2836//
2837template <typename T1, typename T2>
2838class CartesianProductGenerator2
2839    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > {
2840 public:
2841  typedef ::std::tr1::tuple<T1, T2> ParamType;
2842
2843  CartesianProductGenerator2(const ParamGenerator<T1>& g1,
2844      const ParamGenerator<T2>& g2)
2845      : g1_(g1), g2_(g2) {}
2846  virtual ~CartesianProductGenerator2() {}
2847
2848  virtual ParamIteratorInterface<ParamType>* Begin() const {
2849    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());
2850  }
2851  virtual ParamIteratorInterface<ParamType>* End() const {
2852    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());
2853  }
2854
2855 private:
2856  class Iterator : public ParamIteratorInterface<ParamType> {
2857   public:
2858    Iterator(const ParamGeneratorInterface<ParamType>* base,
2859      const ParamGenerator<T1>& g1,
2860      const typename ParamGenerator<T1>::iterator& current1,
2861      const ParamGenerator<T2>& g2,
2862      const typename ParamGenerator<T2>::iterator& current2)
2863        : base_(base),
2864          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
2865          begin2_(g2.begin()), end2_(g2.end()), current2_(current2)    {
2866      ComputeCurrentValue();
2867    }
2868    virtual ~Iterator() {}
2869
2870    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
2871      return base_;
2872    }
2873    // Advance should not be called on beyond-of-range iterators
2874    // so no component iterators must be beyond end of range, either.
2875    virtual void Advance() {
2876      assert(!AtEnd());
2877      ++current2_;
2878      if (current2_ == end2_) {
2879        current2_ = begin2_;
2880        ++current1_;
2881      }
2882      ComputeCurrentValue();
2883    }
2884    virtual ParamIteratorInterface<ParamType>* Clone() const {
2885      return new Iterator(*this);
2886    }
2887    virtual const ParamType* Current() const { return &current_value_; }
2888    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
2889      // Having the same base generator guarantees that the other
2890      // iterator is of the same type and we can downcast.
2891      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
2892          << "The program attempted to compare iterators "
2893          << "from different generators." << std::endl;
2894      const Iterator* typed_other =
2895          CheckedDowncastToActualType<const Iterator>(&other);
2896      // We must report iterators equal if they both point beyond their
2897      // respective ranges. That can happen in a variety of fashions,
2898      // so we have to consult AtEnd().
2899      return (AtEnd() && typed_other->AtEnd()) ||
2900         (
2901          current1_ == typed_other->current1_ &&
2902          current2_ == typed_other->current2_);
2903    }
2904
2905   private:
2906    Iterator(const Iterator& other)
2907        : base_(other.base_),
2908        begin1_(other.begin1_),
2909        end1_(other.end1_),
2910        current1_(other.current1_),
2911        begin2_(other.begin2_),
2912        end2_(other.end2_),
2913        current2_(other.current2_) {
2914      ComputeCurrentValue();
2915    }
2916
2917    void ComputeCurrentValue() {
2918      if (!AtEnd())
2919        current_value_ = ParamType(*current1_, *current2_);
2920    }
2921    bool AtEnd() const {
2922      // We must report iterator past the end of the range when either of the
2923      // component iterators has reached the end of its range.
2924      return
2925          current1_ == end1_ ||
2926          current2_ == end2_;
2927    }
2928
2929    // No implementation - assignment is unsupported.
2930    void operator=(const Iterator& other);
2931
2932    const ParamGeneratorInterface<ParamType>* const base_;
2933    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
2934    // current[i]_ is the actual traversing iterator.
2935    const typename ParamGenerator<T1>::iterator begin1_;
2936    const typename ParamGenerator<T1>::iterator end1_;
2937    typename ParamGenerator<T1>::iterator current1_;
2938    const typename ParamGenerator<T2>::iterator begin2_;
2939    const typename ParamGenerator<T2>::iterator end2_;
2940    typename ParamGenerator<T2>::iterator current2_;
2941    ParamType current_value_;
2942  };  // class CartesianProductGenerator2::Iterator
2943
2944  // No implementation - assignment is unsupported.
2945  void operator=(const CartesianProductGenerator2& other);
2946
2947  const ParamGenerator<T1> g1_;
2948  const ParamGenerator<T2> g2_;
2949};  // class CartesianProductGenerator2
2950
2951
2952template <typename