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