1 // This file was GENERATED by command:
2 // pump.py gtest-param-util-generated.h.pump
3 // DO NOT EDIT BY HAND!!!
5 // Copyright 2008 Google Inc.
6 // All Rights Reserved.
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions are
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
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.
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.
35 // Type and function utilities for implementing parameterized tests.
36 // This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
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.
45 // GOOGLETEST_CM0001 DO NOT DELETE
47 #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
48 #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
50 #include "gtest/internal/gtest-param-util.h"
51 #include "gtest/internal/gtest-port.h"
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);
62 template <typename T, size_t N>
63 internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
65 template <class Container>
66 internal::ParamGenerator<typename Container::value_type> ValuesIn(
67 const Container& container);
71 // Used in the Values() function to provide polymorphic capabilities.
72 template <typename T1>
75 explicit ValueArray1(T1 v1) : v1_(v1) {}
78 operator ParamGenerator<T>() const {
79 const T array[] = {static_cast<T>(v1_)};
80 return ValuesIn(array);
83 ValueArray1(const ValueArray1& other) : v1_(other.v1_) {}
86 // No implementation - assignment is unsupported.
87 void operator=(const ValueArray1& other);
92 template <typename T1, typename T2>
95 ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
98 operator ParamGenerator<T>() const {
99 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)};
100 return ValuesIn(array);
103 ValueArray2(const ValueArray2& other) : v1_(other.v1_), v2_(other.v2_) {}
106 // No implementation - assignment is unsupported.
107 void operator=(const ValueArray2& other);
113 template <typename T1, typename T2, typename T3>
116 ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
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);
125 ValueArray3(const ValueArray3& other) : v1_(other.v1_), v2_(other.v2_),
129 // No implementation - assignment is unsupported.
130 void operator=(const ValueArray3& other);
137 template <typename T1, typename T2, typename T3, typename T4>
140 ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
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);
150 ValueArray4(const ValueArray4& other) : v1_(other.v1_), v2_(other.v2_),
151 v3_(other.v3_), v4_(other.v4_) {}
154 // No implementation - assignment is unsupported.
155 void operator=(const ValueArray4& other);
163 template <typename T1, typename T2, typename T3, typename T4, typename T5>
166 ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
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);
176 ValueArray5(const ValueArray5& other) : v1_(other.v1_), v2_(other.v2_),
177 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_) {}
180 // No implementation - assignment is unsupported.
181 void operator=(const ValueArray5& other);
190 template <typename T1, typename T2, typename T3, typename T4, typename T5,
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) {}
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);
205 ValueArray6(const ValueArray6& other) : v1_(other.v1_), v2_(other.v2_),
206 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_) {}
209 // No implementation - assignment is unsupported.
210 void operator=(const ValueArray6& other);
220 template <typename T1, typename T2, typename T3, typename T4, typename T5,
221 typename T6, typename T7>
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) {}
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);
235 ValueArray7(const ValueArray7& other) : v1_(other.v1_), v2_(other.v2_),
236 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
240 // No implementation - assignment is unsupported.
241 void operator=(const ValueArray7& other);
252 template <typename T1, typename T2, typename T3, typename T4, typename T5,
253 typename T6, typename T7, typename T8>
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),
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);
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_) {}
273 // No implementation - assignment is unsupported.
274 void operator=(const ValueArray8& other);
286 template <typename T1, typename T2, typename T3, typename T4, typename T5,
287 typename T6, typename T7, typename T8, typename T9>
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),
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);
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_) {}
308 // No implementation - assignment is unsupported.
309 void operator=(const ValueArray9& other);
322 template <typename T1, typename T2, typename T3, typename T4, typename T5,
323 typename T6, typename T7, typename T8, typename T9, typename T10>
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) {}
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);
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_) {}
344 // No implementation - assignment is unsupported.
345 void operator=(const ValueArray10& other);
359 template <typename T1, typename T2, typename T3, typename T4, typename T5,
360 typename T6, typename T7, typename T8, typename T9, typename T10,
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) {}
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);
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_),
383 // No implementation - assignment is unsupported.
384 void operator=(const ValueArray11& other);
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>
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) {}
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);
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_) {}
424 // No implementation - assignment is unsupported.
425 void operator=(const ValueArray12& other);
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>
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) {}
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);
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_) {}
467 // No implementation - assignment is unsupported.
468 void operator=(const ValueArray13& other);
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>
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) {}
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);
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_) {}
511 // No implementation - assignment is unsupported.
512 void operator=(const ValueArray14& other);
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>
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) {}
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);
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_),
558 // No implementation - assignment is unsupported.
559 void operator=(const ValueArray15& other);
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,
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),
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);
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_) {}
608 // No implementation - assignment is unsupported.
609 void operator=(const ValueArray16& other);
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>
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) {}
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);
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_) {}
659 // No implementation - assignment is unsupported.
660 void operator=(const ValueArray17& other);
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>
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) {}
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);
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_) {}
712 // No implementation - assignment is unsupported.
713 void operator=(const ValueArray18& other);
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>
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) {}
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);
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_),
767 // No implementation - assignment is unsupported.
768 void operator=(const ValueArray19& other);
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>
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) {}
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);
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_) {}
824 // No implementation - assignment is unsupported.
825 void operator=(const ValueArray20& other);
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,
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) {}
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);
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_) {}
884 // No implementation - assignment is unsupported.
885 void operator=(const ValueArray21& other);
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>
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) {}
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);
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_) {}
945 // No implementation - assignment is unsupported.
946 void operator=(const ValueArray22& other);
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>
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),
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);
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_),
1009 // No implementation - assignment is unsupported.
1010 void operator=(const ValueArray23& other);
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 {
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) {}
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);
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_) {}
1075 // No implementation - assignment is unsupported.
1076 void operator=(const ValueArray24& other);
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 {
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) {}
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);
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_) {}
1142 // No implementation - assignment is unsupported.
1143 void operator=(const ValueArray25& other);
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,
1178 class ValueArray26 {
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) {}
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);
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_) {}
1211 // No implementation - assignment is unsupported.
1212 void operator=(const ValueArray26& other);
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 {
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) {}
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);
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_),
1284 // No implementation - assignment is unsupported.
1285 void operator=(const ValueArray27& other);
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 {
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) {}
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);
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_) {}
1358 // No implementation - assignment is unsupported.
1359 void operator=(const ValueArray28& other);
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 {
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) {}
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);
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_) {}
1433 // No implementation - assignment is unsupported.
1434 void operator=(const ValueArray29& other);
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 {
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) {}
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);
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_) {}
1511 // No implementation - assignment is unsupported.
1512 void operator=(const ValueArray30& other);
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,
1553 class ValueArray31 {
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) {}
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);
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_),
1592 // No implementation - assignment is unsupported.
1593 void operator=(const ValueArray31& other);
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 {
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) {}
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);
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_) {}
1674 // No implementation - assignment is unsupported.
1675 void operator=(const ValueArray32& other);
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 {
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),
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);
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_) {}
1759 // No implementation - assignment is unsupported.
1760 void operator=(const ValueArray33& other);
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 {
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) {}
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);
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_) {}
1845 // No implementation - assignment is unsupported.
1846 void operator=(const ValueArray34& other);
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 {
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) {}
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);
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_),
1933 // No implementation - assignment is unsupported.
1934 void operator=(const ValueArray35& other);
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,
1981 class ValueArray36 {
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) {}
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);
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_) {}
2024 // No implementation - assignment is unsupported.
2025 void operator=(const ValueArray36& other);
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 {
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) {}
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);
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_) {}
2117 // No implementation - assignment is unsupported.
2118 void operator=(const ValueArray37& other);
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 {
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) {}
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);
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_) {}
2211 // No implementation - assignment is unsupported.
2212 void operator=(const ValueArray38& other);
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 {
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) {}
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);
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_),
2308 // No implementation - assignment is unsupported.
2309 void operator=(const ValueArray39& other);
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 {
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),
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);
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_) {}
2407 // No implementation - assignment is unsupported.
2408 void operator=(const ValueArray40& other);
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,
2461 class ValueArray41 {
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) {}
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);
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_) {}
2508 // No implementation - assignment is unsupported.
2509 void operator=(const ValueArray41& other);
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 {
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) {}
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);
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_) {}
2611 // No implementation - assignment is unsupported.
2612 void operator=(const ValueArray42& other);
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 {
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) {}
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);
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_),
2716 // No implementation - assignment is unsupported.
2717 void operator=(const ValueArray43& other);
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 {
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) {}
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);
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_) {}
2823 // No implementation - assignment is unsupported.
2824 void operator=(const ValueArray44& other);
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 {
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) {}
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);
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_) {}
2932 // No implementation - assignment is unsupported.
2933 void operator=(const ValueArray45& other);
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,
2992 class ValueArray46 {
2994 ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
2995 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
2996 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
2997 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
2998 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
2999 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
3000 v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
3001 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
3002 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
3003 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
3004 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
3005 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
3006 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
3008 template <typename T>
3009 operator ParamGenerator<T>() const {
3010 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3011 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3012 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3013 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3014 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3015 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3016 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3017 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3018 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3019 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3020 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3021 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3022 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3023 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3024 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3025 static_cast<T>(v45_), static_cast<T>(v46_)};
3026 return ValuesIn(array);
3029 ValueArray46(const ValueArray46& other) : v1_(other.v1_), v2_(other.v2_),
3030 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
3031 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
3032 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
3033 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
3034 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
3035 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
3036 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
3037 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
3038 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
3039 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
3040 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_) {}
3043 // No implementation - assignment is unsupported.
3044 void operator=(const ValueArray46& other);
3094 template <typename T1, typename T2, typename T3, typename T4, typename T5,
3095 typename T6, typename T7, typename T8, typename T9, typename T10,
3096 typename T11, typename T12, typename T13, typename T14, typename T15,
3097 typename T16, typename T17, typename T18, typename T19, typename T20,
3098 typename T21, typename T22, typename T23, typename T24, typename T25,
3099 typename T26, typename T27, typename T28, typename T29, typename T30,
3100 typename T31, typename T32, typename T33, typename T34, typename T35,
3101 typename T36, typename T37, typename T38, typename T39, typename T40,
3102 typename T41, typename T42, typename T43, typename T44, typename T45,
3103 typename T46, typename T47>
3104 class ValueArray47 {
3106 ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3107 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3108 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3109 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3110 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3111 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
3112 v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
3113 v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
3114 v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
3115 v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
3116 v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
3117 v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
3118 v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
3121 template <typename T>
3122 operator ParamGenerator<T>() const {
3123 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3124 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3125 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3126 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3127 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3128 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3129 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3130 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3131 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3132 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3133 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3134 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3135 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3136 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3137 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3138 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)};
3139 return ValuesIn(array);
3142 ValueArray47(const ValueArray47& other) : v1_(other.v1_), v2_(other.v2_),
3143 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
3144 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
3145 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
3146 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
3147 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
3148 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
3149 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
3150 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
3151 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
3152 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
3153 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),
3157 // No implementation - assignment is unsupported.
3158 void operator=(const ValueArray47& other);
3209 template <typename T1, typename T2, typename T3, typename T4, typename T5,
3210 typename T6, typename T7, typename T8, typename T9, typename T10,
3211 typename T11, typename T12, typename T13, typename T14, typename T15,
3212 typename T16, typename T17, typename T18, typename T19, typename T20,
3213 typename T21, typename T22, typename T23, typename T24, typename T25,
3214 typename T26, typename T27, typename T28, typename T29, typename T30,
3215 typename T31, typename T32, typename T33, typename T34, typename T35,
3216 typename T36, typename T37, typename T38, typename T39, typename T40,
3217 typename T41, typename T42, typename T43, typename T44, typename T45,
3218 typename T46, typename T47, typename T48>
3219 class ValueArray48 {
3221 ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3222 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3223 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3224 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3225 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3226 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
3227 v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
3228 v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
3229 v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
3230 v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
3231 v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
3232 v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
3233 v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
3234 v46_(v46), v47_(v47), v48_(v48) {}
3236 template <typename T>
3237 operator ParamGenerator<T>() const {
3238 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3239 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3240 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3241 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3242 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3243 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3244 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3245 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3246 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3247 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3248 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3249 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3250 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3251 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3252 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3253 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
3254 static_cast<T>(v48_)};
3255 return ValuesIn(array);
3258 ValueArray48(const ValueArray48& other) : v1_(other.v1_), v2_(other.v2_),
3259 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
3260 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
3261 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
3262 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
3263 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
3264 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
3265 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
3266 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
3267 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
3268 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
3269 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),
3270 v47_(other.v47_), v48_(other.v48_) {}
3273 // No implementation - assignment is unsupported.
3274 void operator=(const ValueArray48& other);
3326 template <typename T1, typename T2, typename T3, typename T4, typename T5,
3327 typename T6, typename T7, typename T8, typename T9, typename T10,
3328 typename T11, typename T12, typename T13, typename T14, typename T15,
3329 typename T16, typename T17, typename T18, typename T19, typename T20,
3330 typename T21, typename T22, typename T23, typename T24, typename T25,
3331 typename T26, typename T27, typename T28, typename T29, typename T30,
3332 typename T31, typename T32, typename T33, typename T34, typename T35,
3333 typename T36, typename T37, typename T38, typename T39, typename T40,
3334 typename T41, typename T42, typename T43, typename T44, typename T45,
3335 typename T46, typename T47, typename T48, typename T49>
3336 class ValueArray49 {
3338 ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3339 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3340 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3341 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3342 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3343 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
3344 T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
3345 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
3346 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
3347 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
3348 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
3349 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
3350 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
3351 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
3353 template <typename T>
3354 operator ParamGenerator<T>() const {
3355 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3356 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3357 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3358 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3359 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3360 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3361 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3362 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3363 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3364 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3365 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3366 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3367 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3368 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3369 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3370 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
3371 static_cast<T>(v48_), static_cast<T>(v49_)};
3372 return ValuesIn(array);
3375 ValueArray49(const ValueArray49& other) : v1_(other.v1_), v2_(other.v2_),
3376 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
3377 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
3378 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
3379 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
3380 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
3381 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
3382 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
3383 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
3384 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
3385 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
3386 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),
3387 v47_(other.v47_), v48_(other.v48_), v49_(other.v49_) {}
3390 // No implementation - assignment is unsupported.
3391 void operator=(const ValueArray49& other);
3444 template <typename T1, typename T2, typename T3, typename T4, typename T5,
3445 typename T6, typename T7, typename T8, typename T9, typename T10,
3446 typename T11, typename T12, typename T13, typename T14, typename T15,
3447 typename T16, typename T17, typename T18, typename T19, typename T20,
3448 typename T21, typename T22, typename T23, typename T24, typename T25,
3449 typename T26, typename T27, typename T28, typename T29, typename T30,
3450 typename T31, typename T32, typename T33, typename T34, typename T35,
3451 typename T36, typename T37, typename T38, typename T39, typename T40,
3452 typename T41, typename T42, typename T43, typename T44, typename T45,
3453 typename T46, typename T47, typename T48, typename T49, typename T50>
3454 class ValueArray50 {
3456 ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
3457 T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
3458 T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
3459 T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
3460 T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
3461 T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
3462 T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
3463 v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
3464 v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
3465 v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
3466 v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
3467 v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
3468 v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
3469 v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
3471 template <typename T>
3472 operator ParamGenerator<T>() const {
3473 const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),
3474 static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),
3475 static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),
3476 static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),
3477 static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),
3478 static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),
3479 static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),
3480 static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),
3481 static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),
3482 static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),
3483 static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),
3484 static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),
3485 static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),
3486 static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),
3487 static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),
3488 static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),
3489 static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)};
3490 return ValuesIn(array);
3493 ValueArray50(const ValueArray50& other) : v1_(other.v1_), v2_(other.v2_),
3494 v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),
3495 v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),
3496 v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),
3497 v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),
3498 v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),
3499 v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),
3500 v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),
3501 v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),
3502 v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),
3503 v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),
3504 v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),
3505 v47_(other.v47_), v48_(other.v48_), v49_(other.v49_), v50_(other.v50_) {}
3508 // No implementation - assignment is unsupported.
3509 void operator=(const ValueArray50& other);
3563 # if GTEST_HAS_COMBINE
3564 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
3566 // Generates values from the Cartesian product of values produced
3567 // by the argument generators.
3569 template <typename T1, typename T2>
3570 class CartesianProductGenerator2
3571 : public ParamGeneratorInterface< ::testing::tuple<T1, T2> > {
3573 typedef ::testing::tuple<T1, T2> ParamType;
3575 CartesianProductGenerator2(const ParamGenerator<T1>& g1,
3576 const ParamGenerator<T2>& g2)
3577 : g1_(g1), g2_(g2) {}
3578 virtual ~CartesianProductGenerator2() {}
3580 virtual ParamIteratorInterface<ParamType>* Begin() const {
3581 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());
3583 virtual ParamIteratorInterface<ParamType>* End() const {
3584 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());
3588 class Iterator : public ParamIteratorInterface<ParamType> {
3590 Iterator(const ParamGeneratorInterface<ParamType>* base,
3591 const ParamGenerator<T1>& g1,
3592 const typename ParamGenerator<T1>::iterator& current1,
3593 const ParamGenerator<T2>& g2,
3594 const typename ParamGenerator<T2>::iterator& current2)
3596 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3597 begin2_(g2.begin()), end2_(g2.end()), current2_(current2) {
3598 ComputeCurrentValue();
3600 virtual ~Iterator() {}
3602 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3605 // Advance should not be called on beyond-of-range iterators
3606 // so no component iterators must be beyond end of range, either.
3607 virtual void Advance() {
3610 if (current2_ == end2_) {
3611 current2_ = begin2_;
3614 ComputeCurrentValue();
3616 virtual ParamIteratorInterface<ParamType>* Clone() const {
3617 return new Iterator(*this);
3619 virtual const ParamType* Current() const { return current_value_.get(); }
3620 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3621 // Having the same base generator guarantees that the other
3622 // iterator is of the same type and we can downcast.
3623 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3624 << "The program attempted to compare iterators "
3625 << "from different generators." << std::endl;
3626 const Iterator* typed_other =
3627 CheckedDowncastToActualType<const Iterator>(&other);
3628 // We must report iterators equal if they both point beyond their
3629 // respective ranges. That can happen in a variety of fashions,
3630 // so we have to consult AtEnd().
3631 return (AtEnd() && typed_other->AtEnd()) ||
3633 current1_ == typed_other->current1_ &&
3634 current2_ == typed_other->current2_);
3638 Iterator(const Iterator& other)
3639 : base_(other.base_),
3640 begin1_(other.begin1_),
3642 current1_(other.current1_),
3643 begin2_(other.begin2_),
3645 current2_(other.current2_) {
3646 ComputeCurrentValue();
3649 void ComputeCurrentValue() {
3651 current_value_.reset(new ParamType(*current1_, *current2_));
3653 bool AtEnd() const {
3654 // We must report iterator past the end of the range when either of the
3655 // component iterators has reached the end of its range.
3657 current1_ == end1_ ||
3661 // No implementation - assignment is unsupported.
3662 void operator=(const Iterator& other);
3664 const ParamGeneratorInterface<ParamType>* const base_;
3665 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3666 // current[i]_ is the actual traversing iterator.
3667 const typename ParamGenerator<T1>::iterator begin1_;
3668 const typename ParamGenerator<T1>::iterator end1_;
3669 typename ParamGenerator<T1>::iterator current1_;
3670 const typename ParamGenerator<T2>::iterator begin2_;
3671 const typename ParamGenerator<T2>::iterator end2_;
3672 typename ParamGenerator<T2>::iterator current2_;
3673 linked_ptr<ParamType> current_value_;
3674 }; // class CartesianProductGenerator2::Iterator
3676 // No implementation - assignment is unsupported.
3677 void operator=(const CartesianProductGenerator2& other);
3679 const ParamGenerator<T1> g1_;
3680 const ParamGenerator<T2> g2_;
3681 }; // class CartesianProductGenerator2
3684 template <typename T1, typename T2, typename T3>
3685 class CartesianProductGenerator3
3686 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3> > {
3688 typedef ::testing::tuple<T1, T2, T3> ParamType;
3690 CartesianProductGenerator3(const ParamGenerator<T1>& g1,
3691 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)
3692 : g1_(g1), g2_(g2), g3_(g3) {}
3693 virtual ~CartesianProductGenerator3() {}
3695 virtual ParamIteratorInterface<ParamType>* Begin() const {
3696 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3699 virtual ParamIteratorInterface<ParamType>* End() const {
3700 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
3704 class Iterator : public ParamIteratorInterface<ParamType> {
3706 Iterator(const ParamGeneratorInterface<ParamType>* base,
3707 const ParamGenerator<T1>& g1,
3708 const typename ParamGenerator<T1>::iterator& current1,
3709 const ParamGenerator<T2>& g2,
3710 const typename ParamGenerator<T2>::iterator& current2,
3711 const ParamGenerator<T3>& g3,
3712 const typename ParamGenerator<T3>::iterator& current3)
3714 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3715 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3716 begin3_(g3.begin()), end3_(g3.end()), current3_(current3) {
3717 ComputeCurrentValue();
3719 virtual ~Iterator() {}
3721 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3724 // Advance should not be called on beyond-of-range iterators
3725 // so no component iterators must be beyond end of range, either.
3726 virtual void Advance() {
3729 if (current3_ == end3_) {
3730 current3_ = begin3_;
3733 if (current2_ == end2_) {
3734 current2_ = begin2_;
3737 ComputeCurrentValue();
3739 virtual ParamIteratorInterface<ParamType>* Clone() const {
3740 return new Iterator(*this);
3742 virtual const ParamType* Current() const { return current_value_.get(); }
3743 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3744 // Having the same base generator guarantees that the other
3745 // iterator is of the same type and we can downcast.
3746 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3747 << "The program attempted to compare iterators "
3748 << "from different generators." << std::endl;
3749 const Iterator* typed_other =
3750 CheckedDowncastToActualType<const Iterator>(&other);
3751 // We must report iterators equal if they both point beyond their
3752 // respective ranges. That can happen in a variety of fashions,
3753 // so we have to consult AtEnd().
3754 return (AtEnd() && typed_other->AtEnd()) ||
3756 current1_ == typed_other->current1_ &&
3757 current2_ == typed_other->current2_ &&
3758 current3_ == typed_other->current3_);
3762 Iterator(const Iterator& other)
3763 : base_(other.base_),
3764 begin1_(other.begin1_),
3766 current1_(other.current1_),
3767 begin2_(other.begin2_),
3769 current2_(other.current2_),
3770 begin3_(other.begin3_),
3772 current3_(other.current3_) {
3773 ComputeCurrentValue();
3776 void ComputeCurrentValue() {
3778 current_value_.reset(new ParamType(*current1_, *current2_, *current3_));
3780 bool AtEnd() const {
3781 // We must report iterator past the end of the range when either of the
3782 // component iterators has reached the end of its range.
3784 current1_ == end1_ ||
3785 current2_ == end2_ ||
3789 // No implementation - assignment is unsupported.
3790 void operator=(const Iterator& other);
3792 const ParamGeneratorInterface<ParamType>* const base_;
3793 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3794 // current[i]_ is the actual traversing iterator.
3795 const typename ParamGenerator<T1>::iterator begin1_;
3796 const typename ParamGenerator<T1>::iterator end1_;
3797 typename ParamGenerator<T1>::iterator current1_;
3798 const typename ParamGenerator<T2>::iterator begin2_;
3799 const typename ParamGenerator<T2>::iterator end2_;
3800 typename ParamGenerator<T2>::iterator current2_;
3801 const typename ParamGenerator<T3>::iterator begin3_;
3802 const typename ParamGenerator<T3>::iterator end3_;
3803 typename ParamGenerator<T3>::iterator current3_;
3804 linked_ptr<ParamType> current_value_;
3805 }; // class CartesianProductGenerator3::Iterator
3807 // No implementation - assignment is unsupported.
3808 void operator=(const CartesianProductGenerator3& other);
3810 const ParamGenerator<T1> g1_;
3811 const ParamGenerator<T2> g2_;
3812 const ParamGenerator<T3> g3_;
3813 }; // class CartesianProductGenerator3
3816 template <typename T1, typename T2, typename T3, typename T4>
3817 class CartesianProductGenerator4
3818 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4> > {
3820 typedef ::testing::tuple<T1, T2, T3, T4> ParamType;
3822 CartesianProductGenerator4(const ParamGenerator<T1>& g1,
3823 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3824 const ParamGenerator<T4>& g4)
3825 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
3826 virtual ~CartesianProductGenerator4() {}
3828 virtual ParamIteratorInterface<ParamType>* Begin() const {
3829 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3830 g3_.begin(), g4_, g4_.begin());
3832 virtual ParamIteratorInterface<ParamType>* End() const {
3833 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3838 class Iterator : public ParamIteratorInterface<ParamType> {
3840 Iterator(const ParamGeneratorInterface<ParamType>* base,
3841 const ParamGenerator<T1>& g1,
3842 const typename ParamGenerator<T1>::iterator& current1,
3843 const ParamGenerator<T2>& g2,
3844 const typename ParamGenerator<T2>::iterator& current2,
3845 const ParamGenerator<T3>& g3,
3846 const typename ParamGenerator<T3>::iterator& current3,
3847 const ParamGenerator<T4>& g4,
3848 const typename ParamGenerator<T4>::iterator& current4)
3850 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
3851 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
3852 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
3853 begin4_(g4.begin()), end4_(g4.end()), current4_(current4) {
3854 ComputeCurrentValue();
3856 virtual ~Iterator() {}
3858 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
3861 // Advance should not be called on beyond-of-range iterators
3862 // so no component iterators must be beyond end of range, either.
3863 virtual void Advance() {
3866 if (current4_ == end4_) {
3867 current4_ = begin4_;
3870 if (current3_ == end3_) {
3871 current3_ = begin3_;
3874 if (current2_ == end2_) {
3875 current2_ = begin2_;
3878 ComputeCurrentValue();
3880 virtual ParamIteratorInterface<ParamType>* Clone() const {
3881 return new Iterator(*this);
3883 virtual const ParamType* Current() const { return current_value_.get(); }
3884 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
3885 // Having the same base generator guarantees that the other
3886 // iterator is of the same type and we can downcast.
3887 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
3888 << "The program attempted to compare iterators "
3889 << "from different generators." << std::endl;
3890 const Iterator* typed_other =
3891 CheckedDowncastToActualType<const Iterator>(&other);
3892 // We must report iterators equal if they both point beyond their
3893 // respective ranges. That can happen in a variety of fashions,
3894 // so we have to consult AtEnd().
3895 return (AtEnd() && typed_other->AtEnd()) ||
3897 current1_ == typed_other->current1_ &&
3898 current2_ == typed_other->current2_ &&
3899 current3_ == typed_other->current3_ &&
3900 current4_ == typed_other->current4_);
3904 Iterator(const Iterator& other)
3905 : base_(other.base_),
3906 begin1_(other.begin1_),
3908 current1_(other.current1_),
3909 begin2_(other.begin2_),
3911 current2_(other.current2_),
3912 begin3_(other.begin3_),
3914 current3_(other.current3_),
3915 begin4_(other.begin4_),
3917 current4_(other.current4_) {
3918 ComputeCurrentValue();
3921 void ComputeCurrentValue() {
3923 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
3926 bool AtEnd() const {
3927 // We must report iterator past the end of the range when either of the
3928 // component iterators has reached the end of its range.
3930 current1_ == end1_ ||
3931 current2_ == end2_ ||
3932 current3_ == end3_ ||
3936 // No implementation - assignment is unsupported.
3937 void operator=(const Iterator& other);
3939 const ParamGeneratorInterface<ParamType>* const base_;
3940 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
3941 // current[i]_ is the actual traversing iterator.
3942 const typename ParamGenerator<T1>::iterator begin1_;
3943 const typename ParamGenerator<T1>::iterator end1_;
3944 typename ParamGenerator<T1>::iterator current1_;
3945 const typename ParamGenerator<T2>::iterator begin2_;
3946 const typename ParamGenerator<T2>::iterator end2_;
3947 typename ParamGenerator<T2>::iterator current2_;
3948 const typename ParamGenerator<T3>::iterator begin3_;
3949 const typename ParamGenerator<T3>::iterator end3_;
3950 typename ParamGenerator<T3>::iterator current3_;
3951 const typename ParamGenerator<T4>::iterator begin4_;
3952 const typename ParamGenerator<T4>::iterator end4_;
3953 typename ParamGenerator<T4>::iterator current4_;
3954 linked_ptr<ParamType> current_value_;
3955 }; // class CartesianProductGenerator4::Iterator
3957 // No implementation - assignment is unsupported.
3958 void operator=(const CartesianProductGenerator4& other);
3960 const ParamGenerator<T1> g1_;
3961 const ParamGenerator<T2> g2_;
3962 const ParamGenerator<T3> g3_;
3963 const ParamGenerator<T4> g4_;
3964 }; // class CartesianProductGenerator4
3967 template <typename T1, typename T2, typename T3, typename T4, typename T5>
3968 class CartesianProductGenerator5
3969 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5> > {
3971 typedef ::testing::tuple<T1, T2, T3, T4, T5> ParamType;
3973 CartesianProductGenerator5(const ParamGenerator<T1>& g1,
3974 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
3975 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)
3976 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
3977 virtual ~CartesianProductGenerator5() {}
3979 virtual ParamIteratorInterface<ParamType>* Begin() const {
3980 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
3981 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
3983 virtual ParamIteratorInterface<ParamType>* End() const {
3984 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
3985 g4_, g4_.end(), g5_, g5_.end());
3989 class Iterator : public ParamIteratorInterface<ParamType> {
3991 Iterator(const ParamGeneratorInterface<ParamType>* base,
3992 const ParamGenerator<T1>& g1,
3993 const typename ParamGenerator<T1>::iterator& current1,
3994 const ParamGenerator<T2>& g2,
3995 const typename ParamGenerator<T2>::iterator& current2,
3996 const ParamGenerator<T3>& g3,
3997 const typename ParamGenerator<T3>::iterator& current3,
3998 const ParamGenerator<T4>& g4,
3999 const typename ParamGenerator<T4>::iterator& current4,
4000 const ParamGenerator<T5>& g5,
4001 const typename ParamGenerator<T5>::iterator& current5)
4003 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4004 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4005 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4006 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4007 begin5_(g5.begin()), end5_(g5.end()), current5_(current5) {
4008 ComputeCurrentValue();
4010 virtual ~Iterator() {}
4012 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4015 // Advance should not be called on beyond-of-range iterators
4016 // so no component iterators must be beyond end of range, either.
4017 virtual void Advance() {
4020 if (current5_ == end5_) {
4021 current5_ = begin5_;
4024 if (current4_ == end4_) {
4025 current4_ = begin4_;
4028 if (current3_ == end3_) {
4029 current3_ = begin3_;
4032 if (current2_ == end2_) {
4033 current2_ = begin2_;
4036 ComputeCurrentValue();
4038 virtual ParamIteratorInterface<ParamType>* Clone() const {
4039 return new Iterator(*this);
4041 virtual const ParamType* Current() const { return current_value_.get(); }
4042 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4043 // Having the same base generator guarantees that the other
4044 // iterator is of the same type and we can downcast.
4045 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4046 << "The program attempted to compare iterators "
4047 << "from different generators." << std::endl;
4048 const Iterator* typed_other =
4049 CheckedDowncastToActualType<const Iterator>(&other);
4050 // We must report iterators equal if they both point beyond their
4051 // respective ranges. That can happen in a variety of fashions,
4052 // so we have to consult AtEnd().
4053 return (AtEnd() && typed_other->AtEnd()) ||
4055 current1_ == typed_other->current1_ &&
4056 current2_ == typed_other->current2_ &&
4057 current3_ == typed_other->current3_ &&
4058 current4_ == typed_other->current4_ &&
4059 current5_ == typed_other->current5_);
4063 Iterator(const Iterator& other)
4064 : base_(other.base_),
4065 begin1_(other.begin1_),
4067 current1_(other.current1_),
4068 begin2_(other.begin2_),
4070 current2_(other.current2_),
4071 begin3_(other.begin3_),
4073 current3_(other.current3_),
4074 begin4_(other.begin4_),
4076 current4_(other.current4_),
4077 begin5_(other.begin5_),
4079 current5_(other.current5_) {
4080 ComputeCurrentValue();
4083 void ComputeCurrentValue() {
4085 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
4086 *current4_, *current5_));
4088 bool AtEnd() const {
4089 // We must report iterator past the end of the range when either of the
4090 // component iterators has reached the end of its range.
4092 current1_ == end1_ ||
4093 current2_ == end2_ ||
4094 current3_ == end3_ ||
4095 current4_ == end4_ ||
4099 // No implementation - assignment is unsupported.
4100 void operator=(const Iterator& other);
4102 const ParamGeneratorInterface<ParamType>* const base_;
4103 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4104 // current[i]_ is the actual traversing iterator.
4105 const typename ParamGenerator<T1>::iterator begin1_;
4106 const typename ParamGenerator<T1>::iterator end1_;
4107 typename ParamGenerator<T1>::iterator current1_;
4108 const typename ParamGenerator<T2>::iterator begin2_;
4109 const typename ParamGenerator<T2>::iterator end2_;
4110 typename ParamGenerator<T2>::iterator current2_;
4111 const typename ParamGenerator<T3>::iterator begin3_;
4112 const typename ParamGenerator<T3>::iterator end3_;
4113 typename ParamGenerator<T3>::iterator current3_;
4114 const typename ParamGenerator<T4>::iterator begin4_;
4115 const typename ParamGenerator<T4>::iterator end4_;
4116 typename ParamGenerator<T4>::iterator current4_;
4117 const typename ParamGenerator<T5>::iterator begin5_;
4118 const typename ParamGenerator<T5>::iterator end5_;
4119 typename ParamGenerator<T5>::iterator current5_;
4120 linked_ptr<ParamType> current_value_;
4121 }; // class CartesianProductGenerator5::Iterator
4123 // No implementation - assignment is unsupported.
4124 void operator=(const CartesianProductGenerator5& other);
4126 const ParamGenerator<T1> g1_;
4127 const ParamGenerator<T2> g2_;
4128 const ParamGenerator<T3> g3_;
4129 const ParamGenerator<T4> g4_;
4130 const ParamGenerator<T5> g5_;
4131 }; // class CartesianProductGenerator5
4134 template <typename T1, typename T2, typename T3, typename T4, typename T5,
4136 class CartesianProductGenerator6
4137 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5,
4140 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6> ParamType;
4142 CartesianProductGenerator6(const ParamGenerator<T1>& g1,
4143 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4144 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4145 const ParamGenerator<T6>& g6)
4146 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
4147 virtual ~CartesianProductGenerator6() {}
4149 virtual ParamIteratorInterface<ParamType>* Begin() const {
4150 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4151 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
4153 virtual ParamIteratorInterface<ParamType>* End() const {
4154 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4155 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
4159 class Iterator : public ParamIteratorInterface<ParamType> {
4161 Iterator(const ParamGeneratorInterface<ParamType>* base,
4162 const ParamGenerator<T1>& g1,
4163 const typename ParamGenerator<T1>::iterator& current1,
4164 const ParamGenerator<T2>& g2,
4165 const typename ParamGenerator<T2>::iterator& current2,
4166 const ParamGenerator<T3>& g3,
4167 const typename ParamGenerator<T3>::iterator& current3,
4168 const ParamGenerator<T4>& g4,
4169 const typename ParamGenerator<T4>::iterator& current4,
4170 const ParamGenerator<T5>& g5,
4171 const typename ParamGenerator<T5>::iterator& current5,
4172 const ParamGenerator<T6>& g6,
4173 const typename ParamGenerator<T6>::iterator& current6)
4175 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4176 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4177 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4178 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4179 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4180 begin6_(g6.begin()), end6_(g6.end()), current6_(current6) {
4181 ComputeCurrentValue();
4183 virtual ~Iterator() {}
4185 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4188 // Advance should not be called on beyond-of-range iterators
4189 // so no component iterators must be beyond end of range, either.
4190 virtual void Advance() {
4193 if (current6_ == end6_) {
4194 current6_ = begin6_;
4197 if (current5_ == end5_) {
4198 current5_ = begin5_;
4201 if (current4_ == end4_) {
4202 current4_ = begin4_;
4205 if (current3_ == end3_) {
4206 current3_ = begin3_;
4209 if (current2_ == end2_) {
4210 current2_ = begin2_;
4213 ComputeCurrentValue();
4215 virtual ParamIteratorInterface<ParamType>* Clone() const {
4216 return new Iterator(*this);
4218 virtual const ParamType* Current() const { return current_value_.get(); }
4219 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4220 // Having the same base generator guarantees that the other
4221 // iterator is of the same type and we can downcast.
4222 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4223 << "The program attempted to compare iterators "
4224 << "from different generators." << std::endl;
4225 const Iterator* typed_other =
4226 CheckedDowncastToActualType<const Iterator>(&other);
4227 // We must report iterators equal if they both point beyond their
4228 // respective ranges. That can happen in a variety of fashions,
4229 // so we have to consult AtEnd().
4230 return (AtEnd() && typed_other->AtEnd()) ||
4232 current1_ == typed_other->current1_ &&
4233 current2_ == typed_other->current2_ &&
4234 current3_ == typed_other->current3_ &&
4235 current4_ == typed_other->current4_ &&
4236 current5_ == typed_other->current5_ &&
4237 current6_ == typed_other->current6_);
4241 Iterator(const Iterator& other)
4242 : base_(other.base_),
4243 begin1_(other.begin1_),
4245 current1_(other.current1_),
4246 begin2_(other.begin2_),
4248 current2_(other.current2_),
4249 begin3_(other.begin3_),
4251 current3_(other.current3_),
4252 begin4_(other.begin4_),
4254 current4_(other.current4_),
4255 begin5_(other.begin5_),
4257 current5_(other.current5_),
4258 begin6_(other.begin6_),
4260 current6_(other.current6_) {
4261 ComputeCurrentValue();
4264 void ComputeCurrentValue() {
4266 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
4267 *current4_, *current5_, *current6_));
4269 bool AtEnd() const {
4270 // We must report iterator past the end of the range when either of the
4271 // component iterators has reached the end of its range.
4273 current1_ == end1_ ||
4274 current2_ == end2_ ||
4275 current3_ == end3_ ||
4276 current4_ == end4_ ||
4277 current5_ == end5_ ||
4281 // No implementation - assignment is unsupported.
4282 void operator=(const Iterator& other);
4284 const ParamGeneratorInterface<ParamType>* const base_;
4285 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4286 // current[i]_ is the actual traversing iterator.
4287 const typename ParamGenerator<T1>::iterator begin1_;
4288 const typename ParamGenerator<T1>::iterator end1_;
4289 typename ParamGenerator<T1>::iterator current1_;
4290 const typename ParamGenerator<T2>::iterator begin2_;
4291 const typename ParamGenerator<T2>::iterator end2_;
4292 typename ParamGenerator<T2>::iterator current2_;
4293 const typename ParamGenerator<T3>::iterator begin3_;
4294 const typename ParamGenerator<T3>::iterator end3_;
4295 typename ParamGenerator<T3>::iterator current3_;
4296 const typename ParamGenerator<T4>::iterator begin4_;
4297 const typename ParamGenerator<T4>::iterator end4_;
4298 typename ParamGenerator<T4>::iterator current4_;
4299 const typename ParamGenerator<T5>::iterator begin5_;
4300 const typename ParamGenerator<T5>::iterator end5_;
4301 typename ParamGenerator<T5>::iterator current5_;
4302 const typename ParamGenerator<T6>::iterator begin6_;
4303 const typename ParamGenerator<T6>::iterator end6_;
4304 typename ParamGenerator<T6>::iterator current6_;
4305 linked_ptr<ParamType> current_value_;
4306 }; // class CartesianProductGenerator6::Iterator
4308 // No implementation - assignment is unsupported.
4309 void operator=(const CartesianProductGenerator6& other);
4311 const ParamGenerator<T1> g1_;
4312 const ParamGenerator<T2> g2_;
4313 const ParamGenerator<T3> g3_;
4314 const ParamGenerator<T4> g4_;
4315 const ParamGenerator<T5> g5_;
4316 const ParamGenerator<T6> g6_;
4317 }; // class CartesianProductGenerator6
4320 template <typename T1, typename T2, typename T3, typename T4, typename T5,
4321 typename T6, typename T7>
4322 class CartesianProductGenerator7
4323 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4326 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
4328 CartesianProductGenerator7(const ParamGenerator<T1>& g1,
4329 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4330 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4331 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)
4332 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
4333 virtual ~CartesianProductGenerator7() {}
4335 virtual ParamIteratorInterface<ParamType>* Begin() const {
4336 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4337 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4340 virtual ParamIteratorInterface<ParamType>* End() const {
4341 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4342 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
4346 class Iterator : public ParamIteratorInterface<ParamType> {
4348 Iterator(const ParamGeneratorInterface<ParamType>* base,
4349 const ParamGenerator<T1>& g1,
4350 const typename ParamGenerator<T1>::iterator& current1,
4351 const ParamGenerator<T2>& g2,
4352 const typename ParamGenerator<T2>::iterator& current2,
4353 const ParamGenerator<T3>& g3,
4354 const typename ParamGenerator<T3>::iterator& current3,
4355 const ParamGenerator<T4>& g4,
4356 const typename ParamGenerator<T4>::iterator& current4,
4357 const ParamGenerator<T5>& g5,
4358 const typename ParamGenerator<T5>::iterator& current5,
4359 const ParamGenerator<T6>& g6,
4360 const typename ParamGenerator<T6>::iterator& current6,
4361 const ParamGenerator<T7>& g7,
4362 const typename ParamGenerator<T7>::iterator& current7)
4364 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4365 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4366 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4367 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4368 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4369 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4370 begin7_(g7.begin()), end7_(g7.end()), current7_(current7) {
4371 ComputeCurrentValue();
4373 virtual ~Iterator() {}
4375 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4378 // Advance should not be called on beyond-of-range iterators
4379 // so no component iterators must be beyond end of range, either.
4380 virtual void Advance() {
4383 if (current7_ == end7_) {
4384 current7_ = begin7_;
4387 if (current6_ == end6_) {
4388 current6_ = begin6_;
4391 if (current5_ == end5_) {
4392 current5_ = begin5_;
4395 if (current4_ == end4_) {
4396 current4_ = begin4_;
4399 if (current3_ == end3_) {
4400 current3_ = begin3_;
4403 if (current2_ == end2_) {
4404 current2_ = begin2_;
4407 ComputeCurrentValue();
4409 virtual ParamIteratorInterface<ParamType>* Clone() const {
4410 return new Iterator(*this);
4412 virtual const ParamType* Current() const { return current_value_.get(); }
4413 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4414 // Having the same base generator guarantees that the other
4415 // iterator is of the same type and we can downcast.
4416 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4417 << "The program attempted to compare iterators "
4418 << "from different generators." << std::endl;
4419 const Iterator* typed_other =
4420 CheckedDowncastToActualType<const Iterator>(&other);
4421 // We must report iterators equal if they both point beyond their
4422 // respective ranges. That can happen in a variety of fashions,
4423 // so we have to consult AtEnd().
4424 return (AtEnd() && typed_other->AtEnd()) ||
4426 current1_ == typed_other->current1_ &&
4427 current2_ == typed_other->current2_ &&
4428 current3_ == typed_other->current3_ &&
4429 current4_ == typed_other->current4_ &&
4430 current5_ == typed_other->current5_ &&
4431 current6_ == typed_other->current6_ &&
4432 current7_ == typed_other->current7_);
4436 Iterator(const Iterator& other)
4437 : base_(other.base_),
4438 begin1_(other.begin1_),
4440 current1_(other.current1_),
4441 begin2_(other.begin2_),
4443 current2_(other.current2_),
4444 begin3_(other.begin3_),
4446 current3_(other.current3_),
4447 begin4_(other.begin4_),
4449 current4_(other.current4_),
4450 begin5_(other.begin5_),
4452 current5_(other.current5_),
4453 begin6_(other.begin6_),
4455 current6_(other.current6_),
4456 begin7_(other.begin7_),
4458 current7_(other.current7_) {
4459 ComputeCurrentValue();
4462 void ComputeCurrentValue() {
4464 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
4465 *current4_, *current5_, *current6_, *current7_));
4467 bool AtEnd() const {
4468 // We must report iterator past the end of the range when either of the
4469 // component iterators has reached the end of its range.
4471 current1_ == end1_ ||
4472 current2_ == end2_ ||
4473 current3_ == end3_ ||
4474 current4_ == end4_ ||
4475 current5_ == end5_ ||
4476 current6_ == end6_ ||
4480 // No implementation - assignment is unsupported.
4481 void operator=(const Iterator& other);
4483 const ParamGeneratorInterface<ParamType>* const base_;
4484 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4485 // current[i]_ is the actual traversing iterator.
4486 const typename ParamGenerator<T1>::iterator begin1_;
4487 const typename ParamGenerator<T1>::iterator end1_;
4488 typename ParamGenerator<T1>::iterator current1_;
4489 const typename ParamGenerator<T2>::iterator begin2_;
4490 const typename ParamGenerator<T2>::iterator end2_;
4491 typename ParamGenerator<T2>::iterator current2_;
4492 const typename ParamGenerator<T3>::iterator begin3_;
4493 const typename ParamGenerator<T3>::iterator end3_;
4494 typename ParamGenerator<T3>::iterator current3_;
4495 const typename ParamGenerator<T4>::iterator begin4_;
4496 const typename ParamGenerator<T4>::iterator end4_;
4497 typename ParamGenerator<T4>::iterator current4_;
4498 const typename ParamGenerator<T5>::iterator begin5_;
4499 const typename ParamGenerator<T5>::iterator end5_;
4500 typename ParamGenerator<T5>::iterator current5_;
4501 const typename ParamGenerator<T6>::iterator begin6_;
4502 const typename ParamGenerator<T6>::iterator end6_;
4503 typename ParamGenerator<T6>::iterator current6_;
4504 const typename ParamGenerator<T7>::iterator begin7_;
4505 const typename ParamGenerator<T7>::iterator end7_;
4506 typename ParamGenerator<T7>::iterator current7_;
4507 linked_ptr<ParamType> current_value_;
4508 }; // class CartesianProductGenerator7::Iterator
4510 // No implementation - assignment is unsupported.
4511 void operator=(const CartesianProductGenerator7& other);
4513 const ParamGenerator<T1> g1_;
4514 const ParamGenerator<T2> g2_;
4515 const ParamGenerator<T3> g3_;
4516 const ParamGenerator<T4> g4_;
4517 const ParamGenerator<T5> g5_;
4518 const ParamGenerator<T6> g6_;
4519 const ParamGenerator<T7> g7_;
4520 }; // class CartesianProductGenerator7
4523 template <typename T1, typename T2, typename T3, typename T4, typename T5,
4524 typename T6, typename T7, typename T8>
4525 class CartesianProductGenerator8
4526 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4529 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
4531 CartesianProductGenerator8(const ParamGenerator<T1>& g1,
4532 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4533 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4534 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4535 const ParamGenerator<T8>& g8)
4536 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
4538 virtual ~CartesianProductGenerator8() {}
4540 virtual ParamIteratorInterface<ParamType>* Begin() const {
4541 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4542 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4543 g7_.begin(), g8_, g8_.begin());
4545 virtual ParamIteratorInterface<ParamType>* End() const {
4546 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4547 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4552 class Iterator : public ParamIteratorInterface<ParamType> {
4554 Iterator(const ParamGeneratorInterface<ParamType>* base,
4555 const ParamGenerator<T1>& g1,
4556 const typename ParamGenerator<T1>::iterator& current1,
4557 const ParamGenerator<T2>& g2,
4558 const typename ParamGenerator<T2>::iterator& current2,
4559 const ParamGenerator<T3>& g3,
4560 const typename ParamGenerator<T3>::iterator& current3,
4561 const ParamGenerator<T4>& g4,
4562 const typename ParamGenerator<T4>::iterator& current4,
4563 const ParamGenerator<T5>& g5,
4564 const typename ParamGenerator<T5>::iterator& current5,
4565 const ParamGenerator<T6>& g6,
4566 const typename ParamGenerator<T6>::iterator& current6,
4567 const ParamGenerator<T7>& g7,
4568 const typename ParamGenerator<T7>::iterator& current7,
4569 const ParamGenerator<T8>& g8,
4570 const typename ParamGenerator<T8>::iterator& current8)
4572 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4573 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4574 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4575 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4576 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4577 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4578 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4579 begin8_(g8.begin()), end8_(g8.end()), current8_(current8) {
4580 ComputeCurrentValue();
4582 virtual ~Iterator() {}
4584 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4587 // Advance should not be called on beyond-of-range iterators
4588 // so no component iterators must be beyond end of range, either.
4589 virtual void Advance() {
4592 if (current8_ == end8_) {
4593 current8_ = begin8_;
4596 if (current7_ == end7_) {
4597 current7_ = begin7_;
4600 if (current6_ == end6_) {
4601 current6_ = begin6_;
4604 if (current5_ == end5_) {
4605 current5_ = begin5_;
4608 if (current4_ == end4_) {
4609 current4_ = begin4_;
4612 if (current3_ == end3_) {
4613 current3_ = begin3_;
4616 if (current2_ == end2_) {
4617 current2_ = begin2_;
4620 ComputeCurrentValue();
4622 virtual ParamIteratorInterface<ParamType>* Clone() const {
4623 return new Iterator(*this);
4625 virtual const ParamType* Current() const { return current_value_.get(); }
4626 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4627 // Having the same base generator guarantees that the other
4628 // iterator is of the same type and we can downcast.
4629 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4630 << "The program attempted to compare iterators "
4631 << "from different generators." << std::endl;
4632 const Iterator* typed_other =
4633 CheckedDowncastToActualType<const Iterator>(&other);
4634 // We must report iterators equal if they both point beyond their
4635 // respective ranges. That can happen in a variety of fashions,
4636 // so we have to consult AtEnd().
4637 return (AtEnd() && typed_other->AtEnd()) ||
4639 current1_ == typed_other->current1_ &&
4640 current2_ == typed_other->current2_ &&
4641 current3_ == typed_other->current3_ &&
4642 current4_ == typed_other->current4_ &&
4643 current5_ == typed_other->current5_ &&
4644 current6_ == typed_other->current6_ &&
4645 current7_ == typed_other->current7_ &&
4646 current8_ == typed_other->current8_);
4650 Iterator(const Iterator& other)
4651 : base_(other.base_),
4652 begin1_(other.begin1_),
4654 current1_(other.current1_),
4655 begin2_(other.begin2_),
4657 current2_(other.current2_),
4658 begin3_(other.begin3_),
4660 current3_(other.current3_),
4661 begin4_(other.begin4_),
4663 current4_(other.current4_),
4664 begin5_(other.begin5_),
4666 current5_(other.current5_),
4667 begin6_(other.begin6_),
4669 current6_(other.current6_),
4670 begin7_(other.begin7_),
4672 current7_(other.current7_),
4673 begin8_(other.begin8_),
4675 current8_(other.current8_) {
4676 ComputeCurrentValue();
4679 void ComputeCurrentValue() {
4681 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
4682 *current4_, *current5_, *current6_, *current7_, *current8_));
4684 bool AtEnd() const {
4685 // We must report iterator past the end of the range when either of the
4686 // component iterators has reached the end of its range.
4688 current1_ == end1_ ||
4689 current2_ == end2_ ||
4690 current3_ == end3_ ||
4691 current4_ == end4_ ||
4692 current5_ == end5_ ||
4693 current6_ == end6_ ||
4694 current7_ == end7_ ||
4698 // No implementation - assignment is unsupported.
4699 void operator=(const Iterator& other);
4701 const ParamGeneratorInterface<ParamType>* const base_;
4702 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4703 // current[i]_ is the actual traversing iterator.
4704 const typename ParamGenerator<T1>::iterator begin1_;
4705 const typename ParamGenerator<T1>::iterator end1_;
4706 typename ParamGenerator<T1>::iterator current1_;
4707 const typename ParamGenerator<T2>::iterator begin2_;
4708 const typename ParamGenerator<T2>::iterator end2_;
4709 typename ParamGenerator<T2>::iterator current2_;
4710 const typename ParamGenerator<T3>::iterator begin3_;
4711 const typename ParamGenerator<T3>::iterator end3_;
4712 typename ParamGenerator<T3>::iterator current3_;
4713 const typename ParamGenerator<T4>::iterator begin4_;
4714 const typename ParamGenerator<T4>::iterator end4_;
4715 typename ParamGenerator<T4>::iterator current4_;
4716 const typename ParamGenerator<T5>::iterator begin5_;
4717 const typename ParamGenerator<T5>::iterator end5_;
4718 typename ParamGenerator<T5>::iterator current5_;
4719 const typename ParamGenerator<T6>::iterator begin6_;
4720 const typename ParamGenerator<T6>::iterator end6_;
4721 typename ParamGenerator<T6>::iterator current6_;
4722 const typename ParamGenerator<T7>::iterator begin7_;
4723 const typename ParamGenerator<T7>::iterator end7_;
4724 typename ParamGenerator<T7>::iterator current7_;
4725 const typename ParamGenerator<T8>::iterator begin8_;
4726 const typename ParamGenerator<T8>::iterator end8_;
4727 typename ParamGenerator<T8>::iterator current8_;
4728 linked_ptr<ParamType> current_value_;
4729 }; // class CartesianProductGenerator8::Iterator
4731 // No implementation - assignment is unsupported.
4732 void operator=(const CartesianProductGenerator8& other);
4734 const ParamGenerator<T1> g1_;
4735 const ParamGenerator<T2> g2_;
4736 const ParamGenerator<T3> g3_;
4737 const ParamGenerator<T4> g4_;
4738 const ParamGenerator<T5> g5_;
4739 const ParamGenerator<T6> g6_;
4740 const ParamGenerator<T7> g7_;
4741 const ParamGenerator<T8> g8_;
4742 }; // class CartesianProductGenerator8
4745 template <typename T1, typename T2, typename T3, typename T4, typename T5,
4746 typename T6, typename T7, typename T8, typename T9>
4747 class CartesianProductGenerator9
4748 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4751 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
4753 CartesianProductGenerator9(const ParamGenerator<T1>& g1,
4754 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4755 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4756 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4757 const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)
4758 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4760 virtual ~CartesianProductGenerator9() {}
4762 virtual ParamIteratorInterface<ParamType>* Begin() const {
4763 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
4764 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
4765 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
4767 virtual ParamIteratorInterface<ParamType>* End() const {
4768 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
4769 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
4770 g8_.end(), g9_, g9_.end());
4774 class Iterator : public ParamIteratorInterface<ParamType> {
4776 Iterator(const ParamGeneratorInterface<ParamType>* base,
4777 const ParamGenerator<T1>& g1,
4778 const typename ParamGenerator<T1>::iterator& current1,
4779 const ParamGenerator<T2>& g2,
4780 const typename ParamGenerator<T2>::iterator& current2,
4781 const ParamGenerator<T3>& g3,
4782 const typename ParamGenerator<T3>::iterator& current3,
4783 const ParamGenerator<T4>& g4,
4784 const typename ParamGenerator<T4>::iterator& current4,
4785 const ParamGenerator<T5>& g5,
4786 const typename ParamGenerator<T5>::iterator& current5,
4787 const ParamGenerator<T6>& g6,
4788 const typename ParamGenerator<T6>::iterator& current6,
4789 const ParamGenerator<T7>& g7,
4790 const typename ParamGenerator<T7>::iterator& current7,
4791 const ParamGenerator<T8>& g8,
4792 const typename ParamGenerator<T8>::iterator& current8,
4793 const ParamGenerator<T9>& g9,
4794 const typename ParamGenerator<T9>::iterator& current9)
4796 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
4797 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
4798 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
4799 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
4800 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
4801 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
4802 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
4803 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
4804 begin9_(g9.begin()), end9_(g9.end()), current9_(current9) {
4805 ComputeCurrentValue();
4807 virtual ~Iterator() {}
4809 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
4812 // Advance should not be called on beyond-of-range iterators
4813 // so no component iterators must be beyond end of range, either.
4814 virtual void Advance() {
4817 if (current9_ == end9_) {
4818 current9_ = begin9_;
4821 if (current8_ == end8_) {
4822 current8_ = begin8_;
4825 if (current7_ == end7_) {
4826 current7_ = begin7_;
4829 if (current6_ == end6_) {
4830 current6_ = begin6_;
4833 if (current5_ == end5_) {
4834 current5_ = begin5_;
4837 if (current4_ == end4_) {
4838 current4_ = begin4_;
4841 if (current3_ == end3_) {
4842 current3_ = begin3_;
4845 if (current2_ == end2_) {
4846 current2_ = begin2_;
4849 ComputeCurrentValue();
4851 virtual ParamIteratorInterface<ParamType>* Clone() const {
4852 return new Iterator(*this);
4854 virtual const ParamType* Current() const { return current_value_.get(); }
4855 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
4856 // Having the same base generator guarantees that the other
4857 // iterator is of the same type and we can downcast.
4858 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
4859 << "The program attempted to compare iterators "
4860 << "from different generators." << std::endl;
4861 const Iterator* typed_other =
4862 CheckedDowncastToActualType<const Iterator>(&other);
4863 // We must report iterators equal if they both point beyond their
4864 // respective ranges. That can happen in a variety of fashions,
4865 // so we have to consult AtEnd().
4866 return (AtEnd() && typed_other->AtEnd()) ||
4868 current1_ == typed_other->current1_ &&
4869 current2_ == typed_other->current2_ &&
4870 current3_ == typed_other->current3_ &&
4871 current4_ == typed_other->current4_ &&
4872 current5_ == typed_other->current5_ &&
4873 current6_ == typed_other->current6_ &&
4874 current7_ == typed_other->current7_ &&
4875 current8_ == typed_other->current8_ &&
4876 current9_ == typed_other->current9_);
4880 Iterator(const Iterator& other)
4881 : base_(other.base_),
4882 begin1_(other.begin1_),
4884 current1_(other.current1_),
4885 begin2_(other.begin2_),
4887 current2_(other.current2_),
4888 begin3_(other.begin3_),
4890 current3_(other.current3_),
4891 begin4_(other.begin4_),
4893 current4_(other.current4_),
4894 begin5_(other.begin5_),
4896 current5_(other.current5_),
4897 begin6_(other.begin6_),
4899 current6_(other.current6_),
4900 begin7_(other.begin7_),
4902 current7_(other.current7_),
4903 begin8_(other.begin8_),
4905 current8_(other.current8_),
4906 begin9_(other.begin9_),
4908 current9_(other.current9_) {
4909 ComputeCurrentValue();
4912 void ComputeCurrentValue() {
4914 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
4915 *current4_, *current5_, *current6_, *current7_, *current8_,
4918 bool AtEnd() const {
4919 // We must report iterator past the end of the range when either of the
4920 // component iterators has reached the end of its range.
4922 current1_ == end1_ ||
4923 current2_ == end2_ ||
4924 current3_ == end3_ ||
4925 current4_ == end4_ ||
4926 current5_ == end5_ ||
4927 current6_ == end6_ ||
4928 current7_ == end7_ ||
4929 current8_ == end8_ ||
4933 // No implementation - assignment is unsupported.
4934 void operator=(const Iterator& other);
4936 const ParamGeneratorInterface<ParamType>* const base_;
4937 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
4938 // current[i]_ is the actual traversing iterator.
4939 const typename ParamGenerator<T1>::iterator begin1_;
4940 const typename ParamGenerator<T1>::iterator end1_;
4941 typename ParamGenerator<T1>::iterator current1_;
4942 const typename ParamGenerator<T2>::iterator begin2_;
4943 const typename ParamGenerator<T2>::iterator end2_;
4944 typename ParamGenerator<T2>::iterator current2_;
4945 const typename ParamGenerator<T3>::iterator begin3_;
4946 const typename ParamGenerator<T3>::iterator end3_;
4947 typename ParamGenerator<T3>::iterator current3_;
4948 const typename ParamGenerator<T4>::iterator begin4_;
4949 const typename ParamGenerator<T4>::iterator end4_;
4950 typename ParamGenerator<T4>::iterator current4_;
4951 const typename ParamGenerator<T5>::iterator begin5_;
4952 const typename ParamGenerator<T5>::iterator end5_;
4953 typename ParamGenerator<T5>::iterator current5_;
4954 const typename ParamGenerator<T6>::iterator begin6_;
4955 const typename ParamGenerator<T6>::iterator end6_;
4956 typename ParamGenerator<T6>::iterator current6_;
4957 const typename ParamGenerator<T7>::iterator begin7_;
4958 const typename ParamGenerator<T7>::iterator end7_;
4959 typename ParamGenerator<T7>::iterator current7_;
4960 const typename ParamGenerator<T8>::iterator begin8_;
4961 const typename ParamGenerator<T8>::iterator end8_;
4962 typename ParamGenerator<T8>::iterator current8_;
4963 const typename ParamGenerator<T9>::iterator begin9_;
4964 const typename ParamGenerator<T9>::iterator end9_;
4965 typename ParamGenerator<T9>::iterator current9_;
4966 linked_ptr<ParamType> current_value_;
4967 }; // class CartesianProductGenerator9::Iterator
4969 // No implementation - assignment is unsupported.
4970 void operator=(const CartesianProductGenerator9& other);
4972 const ParamGenerator<T1> g1_;
4973 const ParamGenerator<T2> g2_;
4974 const ParamGenerator<T3> g3_;
4975 const ParamGenerator<T4> g4_;
4976 const ParamGenerator<T5> g5_;
4977 const ParamGenerator<T6> g6_;
4978 const ParamGenerator<T7> g7_;
4979 const ParamGenerator<T8> g8_;
4980 const ParamGenerator<T9> g9_;
4981 }; // class CartesianProductGenerator9
4984 template <typename T1, typename T2, typename T3, typename T4, typename T5,
4985 typename T6, typename T7, typename T8, typename T9, typename T10>
4986 class CartesianProductGenerator10
4987 : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,
4988 T7, T8, T9, T10> > {
4990 typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
4992 CartesianProductGenerator10(const ParamGenerator<T1>& g1,
4993 const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
4994 const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
4995 const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
4996 const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,
4997 const ParamGenerator<T10>& g10)
4998 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
4999 g9_(g9), g10_(g10) {}
5000 virtual ~CartesianProductGenerator10() {}
5002 virtual ParamIteratorInterface<ParamType>* Begin() const {
5003 return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
5004 g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
5005 g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
5007 virtual ParamIteratorInterface<ParamType>* End() const {
5008 return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
5009 g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
5010 g8_.end(), g9_, g9_.end(), g10_, g10_.end());
5014 class Iterator : public ParamIteratorInterface<ParamType> {
5016 Iterator(const ParamGeneratorInterface<ParamType>* base,
5017 const ParamGenerator<T1>& g1,
5018 const typename ParamGenerator<T1>::iterator& current1,
5019 const ParamGenerator<T2>& g2,
5020 const typename ParamGenerator<T2>::iterator& current2,
5021 const ParamGenerator<T3>& g3,
5022 const typename ParamGenerator<T3>::iterator& current3,
5023 const ParamGenerator<T4>& g4,
5024 const typename ParamGenerator<T4>::iterator& current4,
5025 const ParamGenerator<T5>& g5,
5026 const typename ParamGenerator<T5>::iterator& current5,
5027 const ParamGenerator<T6>& g6,
5028 const typename ParamGenerator<T6>::iterator& current6,
5029 const ParamGenerator<T7>& g7,
5030 const typename ParamGenerator<T7>::iterator& current7,
5031 const ParamGenerator<T8>& g8,
5032 const typename ParamGenerator<T8>::iterator& current8,
5033 const ParamGenerator<T9>& g9,
5034 const typename ParamGenerator<T9>::iterator& current9,
5035 const ParamGenerator<T10>& g10,
5036 const typename ParamGenerator<T10>::iterator& current10)
5038 begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
5039 begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
5040 begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
5041 begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
5042 begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
5043 begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
5044 begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
5045 begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
5046 begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
5047 begin10_(g10.begin()), end10_(g10.end()), current10_(current10) {
5048 ComputeCurrentValue();
5050 virtual ~Iterator() {}
5052 virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
5055 // Advance should not be called on beyond-of-range iterators
5056 // so no component iterators must be beyond end of range, either.
5057 virtual void Advance() {
5060 if (current10_ == end10_) {
5061 current10_ = begin10_;
5064 if (current9_ == end9_) {
5065 current9_ = begin9_;
5068 if (current8_ == end8_) {
5069 current8_ = begin8_;
5072 if (current7_ == end7_) {
5073 current7_ = begin7_;
5076 if (current6_ == end6_) {
5077 current6_ = begin6_;
5080 if (current5_ == end5_) {
5081 current5_ = begin5_;
5084 if (current4_ == end4_) {
5085 current4_ = begin4_;
5088 if (current3_ == end3_) {
5089 current3_ = begin3_;
5092 if (current2_ == end2_) {
5093 current2_ = begin2_;
5096 ComputeCurrentValue();
5098 virtual ParamIteratorInterface<ParamType>* Clone() const {
5099 return new Iterator(*this);
5101 virtual const ParamType* Current() const { return current_value_.get(); }
5102 virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
5103 // Having the same base generator guarantees that the other
5104 // iterator is of the same type and we can downcast.
5105 GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
5106 << "The program attempted to compare iterators "
5107 << "from different generators." << std::endl;
5108 const Iterator* typed_other =
5109 CheckedDowncastToActualType<const Iterator>(&other);
5110 // We must report iterators equal if they both point beyond their
5111 // respective ranges. That can happen in a variety of fashions,
5112 // so we have to consult AtEnd().
5113 return (AtEnd() && typed_other->AtEnd()) ||
5115 current1_ == typed_other->current1_ &&
5116 current2_ == typed_other->current2_ &&
5117 current3_ == typed_other->current3_ &&
5118 current4_ == typed_other->current4_ &&
5119 current5_ == typed_other->current5_ &&
5120 current6_ == typed_other->current6_ &&
5121 current7_ == typed_other->current7_ &&
5122 current8_ == typed_other->current8_ &&
5123 current9_ == typed_other->current9_ &&
5124 current10_ == typed_other->current10_);
5128 Iterator(const Iterator& other)
5129 : base_(other.base_),
5130 begin1_(other.begin1_),
5132 current1_(other.current1_),
5133 begin2_(other.begin2_),
5135 current2_(other.current2_),
5136 begin3_(other.begin3_),
5138 current3_(other.current3_),
5139 begin4_(other.begin4_),
5141 current4_(other.current4_),
5142 begin5_(other.begin5_),
5144 current5_(other.current5_),
5145 begin6_(other.begin6_),
5147 current6_(other.current6_),
5148 begin7_(other.begin7_),
5150 current7_(other.current7_),
5151 begin8_(other.begin8_),
5153 current8_(other.current8_),
5154 begin9_(other.begin9_),
5156 current9_(other.current9_),
5157 begin10_(other.begin10_),
5158 end10_(other.end10_),
5159 current10_(other.current10_) {
5160 ComputeCurrentValue();
5163 void ComputeCurrentValue() {
5165 current_value_.reset(new ParamType(*current1_, *current2_, *current3_,
5166 *current4_, *current5_, *current6_, *current7_, *current8_,
5167 *current9_, *current10_));
5169 bool AtEnd() const {
5170 // We must report iterator past the end of the range when either of the
5171 // component iterators has reached the end of its range.
5173 current1_ == end1_ ||
5174 current2_ == end2_ ||
5175 current3_ == end3_ ||
5176 current4_ == end4_ ||
5177 current5_ == end5_ ||
5178 current6_ == end6_ ||
5179 current7_ == end7_ ||
5180 current8_ == end8_ ||
5181 current9_ == end9_ ||
5182 current10_ == end10_;
5185 // No implementation - assignment is unsupported.
5186 void operator=(const Iterator& other);
5188 const ParamGeneratorInterface<ParamType>* const base_;
5189 // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
5190 // current[i]_ is the actual traversing iterator.
5191 const typename ParamGenerator<T1>::iterator begin1_;
5192 const typename ParamGenerator<T1>::iterator end1_;
5193 typename ParamGenerator<T1>::iterator current1_;
5194 const typename ParamGenerator<T2>::iterator begin2_;
5195 const typename ParamGenerator<T2>::iterator end2_;
5196 typename ParamGenerator<T2>::iterator current2_;
5197 const typename ParamGenerator<T3>::iterator begin3_;
5198 const typename ParamGenerator<T3>::iterator end3_;
5199 typename ParamGenerator<T3>::iterator current3_;
5200 const typename ParamGenerator<T4>::iterator begin4_;
5201 const typename ParamGenerator<T4>::iterator end4_;
5202 typename ParamGenerator<T4>::iterator current4_;
5203 const typename ParamGenerator<T5>::iterator begin5_;
5204 const typename ParamGenerator<T5>::iterator end5_;
5205 typename ParamGenerator<T5>::iterator current5_;
5206 const typename ParamGenerator<T6>::iterator begin6_;
5207 const typename ParamGenerator<T6>::iterator end6_;
5208 typename ParamGenerator<T6>::iterator current6_;
5209 const typename ParamGenerator<T7>::iterator begin7_;
5210 const typename ParamGenerator<T7>::iterator end7_;
5211 typename ParamGenerator<T7>::iterator current7_;
5212 const typename ParamGenerator<T8>::iterator begin8_;
5213 const typename ParamGenerator<T8>::iterator end8_;
5214 typename ParamGenerator<T8>::iterator current8_;
5215 const typename ParamGenerator<T9>::iterator begin9_;
5216 const typename ParamGenerator<T9>::iterator end9_;
5217 typename ParamGenerator<T9>::iterator current9_;
5218 const typename ParamGenerator<T10>::iterator begin10_;
5219 const typename ParamGenerator<T10>::iterator end10_;
5220 typename ParamGenerator<T10>::iterator current10_;
5221 linked_ptr<ParamType> current_value_;
5222 }; // class CartesianProductGenerator10::Iterator
5224 // No implementation - assignment is unsupported.
5225 void operator=(const CartesianProductGenerator10& other);
5227 const ParamGenerator<T1> g1_;
5228 const ParamGenerator<T2> g2_;
5229 const ParamGenerator<T3> g3_;
5230 const ParamGenerator<T4> g4_;
5231 const ParamGenerator<T5> g5_;
5232 const ParamGenerator<T6> g6_;
5233 const ParamGenerator<T7> g7_;
5234 const ParamGenerator<T8> g8_;
5235 const ParamGenerator<T9> g9_;
5236 const ParamGenerator<T10> g10_;
5237 }; // class CartesianProductGenerator10
5240 // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
5242 // Helper classes providing Combine() with polymorphic features. They allow
5243 // casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
5244 // convertible to U.
5246 template <class Generator1, class Generator2>
5247 class CartesianProductHolder2 {
5249 CartesianProductHolder2(const Generator1& g1, const Generator2& g2)
5250 : g1_(g1), g2_(g2) {}
5251 template <typename T1, typename T2>
5252 operator ParamGenerator< ::testing::tuple<T1, T2> >() const {
5253 return ParamGenerator< ::testing::tuple<T1, T2> >(
5254 new CartesianProductGenerator2<T1, T2>(
5255 static_cast<ParamGenerator<T1> >(g1_),
5256 static_cast<ParamGenerator<T2> >(g2_)));
5260 // No implementation - assignment is unsupported.
5261 void operator=(const CartesianProductHolder2& other);
5263 const Generator1 g1_;
5264 const Generator2 g2_;
5265 }; // class CartesianProductHolder2
5267 template <class Generator1, class Generator2, class Generator3>
5268 class CartesianProductHolder3 {
5270 CartesianProductHolder3(const Generator1& g1, const Generator2& g2,
5271 const Generator3& g3)
5272 : g1_(g1), g2_(g2), g3_(g3) {}
5273 template <typename T1, typename T2, typename T3>
5274 operator ParamGenerator< ::testing::tuple<T1, T2, T3> >() const {
5275 return ParamGenerator< ::testing::tuple<T1, T2, T3> >(
5276 new CartesianProductGenerator3<T1, T2, T3>(
5277 static_cast<ParamGenerator<T1> >(g1_),
5278 static_cast<ParamGenerator<T2> >(g2_),
5279 static_cast<ParamGenerator<T3> >(g3_)));
5283 // No implementation - assignment is unsupported.
5284 void operator=(const CartesianProductHolder3& other);
5286 const Generator1 g1_;
5287 const Generator2 g2_;
5288 const Generator3 g3_;
5289 }; // class CartesianProductHolder3
5291 template <class Generator1, class Generator2, class Generator3,
5293 class CartesianProductHolder4 {
5295 CartesianProductHolder4(const Generator1& g1, const Generator2& g2,
5296 const Generator3& g3, const Generator4& g4)
5297 : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
5298 template <typename T1, typename T2, typename T3, typename T4>
5299 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >() const {
5300 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >(
5301 new CartesianProductGenerator4<T1, T2, T3, T4>(
5302 static_cast<ParamGenerator<T1> >(g1_),
5303 static_cast<ParamGenerator<T2> >(g2_),
5304 static_cast<ParamGenerator<T3> >(g3_),
5305 static_cast<ParamGenerator<T4> >(g4_)));
5309 // No implementation - assignment is unsupported.
5310 void operator=(const CartesianProductHolder4& other);
5312 const Generator1 g1_;
5313 const Generator2 g2_;
5314 const Generator3 g3_;
5315 const Generator4 g4_;
5316 }; // class CartesianProductHolder4
5318 template <class Generator1, class Generator2, class Generator3,
5319 class Generator4, class Generator5>
5320 class CartesianProductHolder5 {
5322 CartesianProductHolder5(const Generator1& g1, const Generator2& g2,
5323 const Generator3& g3, const Generator4& g4, const Generator5& g5)
5324 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
5325 template <typename T1, typename T2, typename T3, typename T4, typename T5>
5326 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >() const {
5327 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >(
5328 new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
5329 static_cast<ParamGenerator<T1> >(g1_),
5330 static_cast<ParamGenerator<T2> >(g2_),
5331 static_cast<ParamGenerator<T3> >(g3_),
5332 static_cast<ParamGenerator<T4> >(g4_),
5333 static_cast<ParamGenerator<T5> >(g5_)));
5337 // No implementation - assignment is unsupported.
5338 void operator=(const CartesianProductHolder5& other);
5340 const Generator1 g1_;
5341 const Generator2 g2_;
5342 const Generator3 g3_;
5343 const Generator4 g4_;
5344 const Generator5 g5_;
5345 }; // class CartesianProductHolder5
5347 template <class Generator1, class Generator2, class Generator3,
5348 class Generator4, class Generator5, class Generator6>
5349 class CartesianProductHolder6 {
5351 CartesianProductHolder6(const Generator1& g1, const Generator2& g2,
5352 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5353 const Generator6& g6)
5354 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
5355 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5357 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >() const {
5358 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >(
5359 new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
5360 static_cast<ParamGenerator<T1> >(g1_),
5361 static_cast<ParamGenerator<T2> >(g2_),
5362 static_cast<ParamGenerator<T3> >(g3_),
5363 static_cast<ParamGenerator<T4> >(g4_),
5364 static_cast<ParamGenerator<T5> >(g5_),
5365 static_cast<ParamGenerator<T6> >(g6_)));
5369 // No implementation - assignment is unsupported.
5370 void operator=(const CartesianProductHolder6& other);
5372 const Generator1 g1_;
5373 const Generator2 g2_;
5374 const Generator3 g3_;
5375 const Generator4 g4_;
5376 const Generator5 g5_;
5377 const Generator6 g6_;
5378 }; // class CartesianProductHolder6
5380 template <class Generator1, class Generator2, class Generator3,
5381 class Generator4, class Generator5, class Generator6, class Generator7>
5382 class CartesianProductHolder7 {
5384 CartesianProductHolder7(const Generator1& g1, const Generator2& g2,
5385 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5386 const Generator6& g6, const Generator7& g7)
5387 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
5388 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5389 typename T6, typename T7>
5390 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6,
5392 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> >(
5393 new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
5394 static_cast<ParamGenerator<T1> >(g1_),
5395 static_cast<ParamGenerator<T2> >(g2_),
5396 static_cast<ParamGenerator<T3> >(g3_),
5397 static_cast<ParamGenerator<T4> >(g4_),
5398 static_cast<ParamGenerator<T5> >(g5_),
5399 static_cast<ParamGenerator<T6> >(g6_),
5400 static_cast<ParamGenerator<T7> >(g7_)));
5404 // No implementation - assignment is unsupported.
5405 void operator=(const CartesianProductHolder7& other);
5407 const Generator1 g1_;
5408 const Generator2 g2_;
5409 const Generator3 g3_;
5410 const Generator4 g4_;
5411 const Generator5 g5_;
5412 const Generator6 g6_;
5413 const Generator7 g7_;
5414 }; // class CartesianProductHolder7
5416 template <class Generator1, class Generator2, class Generator3,
5417 class Generator4, class Generator5, class Generator6, class Generator7,
5419 class CartesianProductHolder8 {
5421 CartesianProductHolder8(const Generator1& g1, const Generator2& g2,
5422 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5423 const Generator6& g6, const Generator7& g7, const Generator8& g8)
5424 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
5426 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5427 typename T6, typename T7, typename T8>
5428 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7,
5430 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
5431 new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
5432 static_cast<ParamGenerator<T1> >(g1_),
5433 static_cast<ParamGenerator<T2> >(g2_),
5434 static_cast<ParamGenerator<T3> >(g3_),
5435 static_cast<ParamGenerator<T4> >(g4_),
5436 static_cast<ParamGenerator<T5> >(g5_),
5437 static_cast<ParamGenerator<T6> >(g6_),
5438 static_cast<ParamGenerator<T7> >(g7_),
5439 static_cast<ParamGenerator<T8> >(g8_)));
5443 // No implementation - assignment is unsupported.
5444 void operator=(const CartesianProductHolder8& other);
5446 const Generator1 g1_;
5447 const Generator2 g2_;
5448 const Generator3 g3_;
5449 const Generator4 g4_;
5450 const Generator5 g5_;
5451 const Generator6 g6_;
5452 const Generator7 g7_;
5453 const Generator8 g8_;
5454 }; // class CartesianProductHolder8
5456 template <class Generator1, class Generator2, class Generator3,
5457 class Generator4, class Generator5, class Generator6, class Generator7,
5458 class Generator8, class Generator9>
5459 class CartesianProductHolder9 {
5461 CartesianProductHolder9(const Generator1& g1, const Generator2& g2,
5462 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5463 const Generator6& g6, const Generator7& g7, const Generator8& g8,
5464 const Generator9& g9)
5465 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5467 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5468 typename T6, typename T7, typename T8, typename T9>
5469 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5471 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
5473 new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
5474 static_cast<ParamGenerator<T1> >(g1_),
5475 static_cast<ParamGenerator<T2> >(g2_),
5476 static_cast<ParamGenerator<T3> >(g3_),
5477 static_cast<ParamGenerator<T4> >(g4_),
5478 static_cast<ParamGenerator<T5> >(g5_),
5479 static_cast<ParamGenerator<T6> >(g6_),
5480 static_cast<ParamGenerator<T7> >(g7_),
5481 static_cast<ParamGenerator<T8> >(g8_),
5482 static_cast<ParamGenerator<T9> >(g9_)));
5486 // No implementation - assignment is unsupported.
5487 void operator=(const CartesianProductHolder9& other);
5489 const Generator1 g1_;
5490 const Generator2 g2_;
5491 const Generator3 g3_;
5492 const Generator4 g4_;
5493 const Generator5 g5_;
5494 const Generator6 g6_;
5495 const Generator7 g7_;
5496 const Generator8 g8_;
5497 const Generator9 g9_;
5498 }; // class CartesianProductHolder9
5500 template <class Generator1, class Generator2, class Generator3,
5501 class Generator4, class Generator5, class Generator6, class Generator7,
5502 class Generator8, class Generator9, class Generator10>
5503 class CartesianProductHolder10 {
5505 CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
5506 const Generator3& g3, const Generator4& g4, const Generator5& g5,
5507 const Generator6& g6, const Generator7& g7, const Generator8& g8,
5508 const Generator9& g9, const Generator10& g10)
5509 : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
5510 g9_(g9), g10_(g10) {}
5511 template <typename T1, typename T2, typename T3, typename T4, typename T5,
5512 typename T6, typename T7, typename T8, typename T9, typename T10>
5513 operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5515 return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5517 new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
5519 static_cast<ParamGenerator<T1> >(g1_),
5520 static_cast<ParamGenerator<T2> >(g2_),
5521 static_cast<ParamGenerator<T3> >(g3_),
5522 static_cast<ParamGenerator<T4> >(g4_),
5523 static_cast<ParamGenerator<T5> >(g5_),
5524 static_cast<ParamGenerator<T6> >(g6_),
5525 static_cast<ParamGenerator<T7> >(g7_),
5526 static_cast<ParamGenerator<T8> >(g8_),
5527 static_cast<ParamGenerator<T9> >(g9_),
5528 static_cast<ParamGenerator<T10> >(g10_)));
5532 // No implementation - assignment is unsupported.
5533 void operator=(const CartesianProductHolder10& other);
5535 const Generator1 g1_;
5536 const Generator2 g2_;
5537 const Generator3 g3_;
5538 const Generator4 g4_;
5539 const Generator5 g5_;
5540 const Generator6 g6_;
5541 const Generator7 g7_;
5542 const Generator8 g8_;
5543 const Generator9 g9_;
5544 const Generator10 g10_;
5545 }; // class CartesianProductHolder10
5547 # endif // GTEST_HAS_COMBINE
5549 } // namespace internal
5550 } // namespace testing
5552 #endif // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_