|  | // This file was GENERATED by command: | 
|  | //     pump.py gtest-param-util-generated.h.pump | 
|  | // DO NOT EDIT BY HAND!!! | 
|  |  | 
|  | // Copyright 2008 Google Inc. | 
|  | // All Rights Reserved. | 
|  | // | 
|  | // Redistribution and use in source and binary forms, with or without | 
|  | // modification, are permitted provided that the following conditions are | 
|  | // met: | 
|  | // | 
|  | //     * Redistributions of source code must retain the above copyright | 
|  | // notice, this list of conditions and the following disclaimer. | 
|  | //     * Redistributions in binary form must reproduce the above | 
|  | // copyright notice, this list of conditions and the following disclaimer | 
|  | // in the documentation and/or other materials provided with the | 
|  | // distribution. | 
|  | //     * Neither the name of Google Inc. nor the names of its | 
|  | // contributors may be used to endorse or promote products derived from | 
|  | // this software without specific prior written permission. | 
|  | // | 
|  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
|  | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
|  | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
|  | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
|  | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
|  | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
|  | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
|  | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
|  | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
|  | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
|  | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|  | // | 
|  | // Author: vladl@google.com (Vlad Losev) | 
|  |  | 
|  | // Type and function utilities for implementing parameterized tests. | 
|  | // This file is generated by a SCRIPT.  DO NOT EDIT BY HAND! | 
|  | // | 
|  | // Currently Google Test supports at most 50 arguments in Values, | 
|  | // and at most 10 arguments in Combine. Please contact | 
|  | // googletestframework@googlegroups.com if you need more. | 
|  | // Please note that the number of arguments to Combine is limited | 
|  | // by the maximum arity of the implementation of tuple which is | 
|  | // currently set at 10. | 
|  |  | 
|  | #ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ | 
|  | #define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ | 
|  |  | 
|  | // scripts/fuse_gtest.py depends on gtest's own header being #included | 
|  | // *unconditionally*.  Therefore these #includes cannot be moved | 
|  | // inside #if GTEST_HAS_PARAM_TEST. | 
|  | #include "gtest/internal/gtest-param-util.h" | 
|  | #include "gtest/internal/gtest-port.h" | 
|  |  | 
|  | #if GTEST_HAS_PARAM_TEST | 
|  |  | 
|  | namespace testing { | 
|  |  | 
|  | // Forward declarations of ValuesIn(), which is implemented in | 
|  | // include/gtest/gtest-param-test.h. | 
|  | template <typename ForwardIterator> | 
|  | internal::ParamGenerator< | 
|  | typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type> | 
|  | ValuesIn(ForwardIterator begin, ForwardIterator end); | 
|  |  | 
|  | template <typename T, size_t N> | 
|  | internal::ParamGenerator<T> ValuesIn(const T (&array)[N]); | 
|  |  | 
|  | template <class Container> | 
|  | internal::ParamGenerator<typename Container::value_type> ValuesIn( | 
|  | const Container& container); | 
|  |  | 
|  | namespace internal { | 
|  |  | 
|  | // Used in the Values() function to provide polymorphic capabilities. | 
|  | template <typename T1> | 
|  | class ValueArray1 { | 
|  | public: | 
|  | explicit ValueArray1(T1 v1) : v1_(v1) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray1& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2> | 
|  | class ValueArray2 { | 
|  | public: | 
|  | ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray2& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3> | 
|  | class ValueArray3 { | 
|  | public: | 
|  | ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray3& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4> | 
|  | class ValueArray4 { | 
|  | public: | 
|  | ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3), | 
|  | v4_(v4) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray4& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5> | 
|  | class ValueArray5 { | 
|  | public: | 
|  | ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3), | 
|  | v4_(v4), v5_(v5) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray5& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6> | 
|  | class ValueArray6 { | 
|  | public: | 
|  | ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2), | 
|  | v3_(v3), v4_(v4), v5_(v5), v6_(v6) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray6& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7> | 
|  | class ValueArray7 { | 
|  | public: | 
|  | ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1), | 
|  | v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray7& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8> | 
|  | class ValueArray8 { | 
|  | public: | 
|  | ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, | 
|  | T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray8& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9> | 
|  | class ValueArray9 { | 
|  | public: | 
|  | ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, | 
|  | T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray9& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10> | 
|  | class ValueArray10 { | 
|  | public: | 
|  | ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray10& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11> | 
|  | class ValueArray11 { | 
|  | public: | 
|  | ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), | 
|  | v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray11& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12> | 
|  | class ValueArray12 { | 
|  | public: | 
|  | ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), | 
|  | v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray12& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13> | 
|  | class ValueArray13 { | 
|  | public: | 
|  | ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), | 
|  | v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), | 
|  | v12_(v12), v13_(v13) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray13& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14> | 
|  | class ValueArray14 { | 
|  | public: | 
|  | ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3), | 
|  | v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), | 
|  | v11_(v11), v12_(v12), v13_(v13), v14_(v14) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray14& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15> | 
|  | class ValueArray15 { | 
|  | public: | 
|  | ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2), | 
|  | v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), | 
|  | v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray15& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16> | 
|  | class ValueArray16 { | 
|  | public: | 
|  | ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1), | 
|  | v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), | 
|  | v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), | 
|  | v16_(v16) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray16& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17> | 
|  | class ValueArray17 { | 
|  | public: | 
|  | ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, | 
|  | T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), | 
|  | v15_(v15), v16_(v16), v17_(v17) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray17& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18> | 
|  | class ValueArray18 { | 
|  | public: | 
|  | ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), | 
|  | v15_(v15), v16_(v16), v17_(v17), v18_(v18) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray18& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19> | 
|  | class ValueArray19 { | 
|  | public: | 
|  | ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), | 
|  | v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), | 
|  | v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray19& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20> | 
|  | class ValueArray20 { | 
|  | public: | 
|  | ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), | 
|  | v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), | 
|  | v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), | 
|  | v19_(v19), v20_(v20) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray20& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21> | 
|  | class ValueArray21 { | 
|  | public: | 
|  | ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), | 
|  | v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), | 
|  | v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), | 
|  | v18_(v18), v19_(v19), v20_(v20), v21_(v21) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray21& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22> | 
|  | class ValueArray22 { | 
|  | public: | 
|  | ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3), | 
|  | v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), | 
|  | v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), | 
|  | v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray22& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23> | 
|  | class ValueArray23 { | 
|  | public: | 
|  | ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2), | 
|  | v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), | 
|  | v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), | 
|  | v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), | 
|  | v23_(v23) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray23& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24> | 
|  | class ValueArray24 { | 
|  | public: | 
|  | ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1), | 
|  | v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), | 
|  | v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), | 
|  | v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), | 
|  | v22_(v22), v23_(v23), v24_(v24) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray24& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25> | 
|  | class ValueArray25 { | 
|  | public: | 
|  | ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, | 
|  | T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), | 
|  | v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), | 
|  | v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray25& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26> | 
|  | class ValueArray26 { | 
|  | public: | 
|  | ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), | 
|  | v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), | 
|  | v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray26& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27> | 
|  | class ValueArray27 { | 
|  | public: | 
|  | ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), | 
|  | v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), | 
|  | v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), | 
|  | v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), | 
|  | v26_(v26), v27_(v27) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray27& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28> | 
|  | class ValueArray28 { | 
|  | public: | 
|  | ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), | 
|  | v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), | 
|  | v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), | 
|  | v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), | 
|  | v25_(v25), v26_(v26), v27_(v27), v28_(v28) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray28& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29> | 
|  | class ValueArray29 { | 
|  | public: | 
|  | ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), | 
|  | v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), | 
|  | v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), | 
|  | v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), | 
|  | v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray29& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30> | 
|  | class ValueArray30 { | 
|  | public: | 
|  | ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3), | 
|  | v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), | 
|  | v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), | 
|  | v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), | 
|  | v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), | 
|  | v29_(v29), v30_(v30) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray30& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31> | 
|  | class ValueArray31 { | 
|  | public: | 
|  | ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2), | 
|  | v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), | 
|  | v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), | 
|  | v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), | 
|  | v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), | 
|  | v29_(v29), v30_(v30), v31_(v31) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray31& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32> | 
|  | class ValueArray32 { | 
|  | public: | 
|  | ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1), | 
|  | v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), | 
|  | v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), | 
|  | v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), | 
|  | v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), | 
|  | v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray32& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33> | 
|  | class ValueArray33 { | 
|  | public: | 
|  | ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, | 
|  | T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), | 
|  | v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), | 
|  | v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), | 
|  | v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), | 
|  | v33_(v33) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray33& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34> | 
|  | class ValueArray34 { | 
|  | public: | 
|  | ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), | 
|  | v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), | 
|  | v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), | 
|  | v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), | 
|  | v33_(v33), v34_(v34) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray34& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35> | 
|  | class ValueArray35 { | 
|  | public: | 
|  | ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), | 
|  | v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), | 
|  | v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), | 
|  | v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), | 
|  | v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), | 
|  | v32_(v32), v33_(v33), v34_(v34), v35_(v35) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray35& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36> | 
|  | class ValueArray36 { | 
|  | public: | 
|  | ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), | 
|  | v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), | 
|  | v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), | 
|  | v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), | 
|  | v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), | 
|  | v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray36& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37> | 
|  | class ValueArray37 { | 
|  | public: | 
|  | ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), | 
|  | v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), | 
|  | v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), | 
|  | v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), | 
|  | v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), | 
|  | v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), | 
|  | v36_(v36), v37_(v37) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray37& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38> | 
|  | class ValueArray38 { | 
|  | public: | 
|  | ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3), | 
|  | v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), | 
|  | v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), | 
|  | v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), | 
|  | v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), | 
|  | v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), | 
|  | v35_(v35), v36_(v36), v37_(v37), v38_(v38) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray38& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39> | 
|  | class ValueArray39 { | 
|  | public: | 
|  | ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2), | 
|  | v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), | 
|  | v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), | 
|  | v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), | 
|  | v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), | 
|  | v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), | 
|  | v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray39& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40> | 
|  | class ValueArray40 { | 
|  | public: | 
|  | ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1), | 
|  | v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), | 
|  | v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), | 
|  | v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), | 
|  | v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), | 
|  | v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), | 
|  | v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), | 
|  | v40_(v40) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray40& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40, | 
|  | typename T41> | 
|  | class ValueArray41 { | 
|  | public: | 
|  | ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, | 
|  | T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), | 
|  | v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), | 
|  | v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), | 
|  | v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), | 
|  | v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), | 
|  | v39_(v39), v40_(v40), v41_(v41) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray41& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | const T41 v41_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40, | 
|  | typename T41, typename T42> | 
|  | class ValueArray42 { | 
|  | public: | 
|  | ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, | 
|  | T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), | 
|  | v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), | 
|  | v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), | 
|  | v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), | 
|  | v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), | 
|  | v39_(v39), v40_(v40), v41_(v41), v42_(v42) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), | 
|  | static_cast<T>(v42_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray42& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | const T41 v41_; | 
|  | const T42 v42_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40, | 
|  | typename T41, typename T42, typename T43> | 
|  | class ValueArray43 { | 
|  | public: | 
|  | ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, | 
|  | T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), | 
|  | v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), | 
|  | v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), | 
|  | v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), | 
|  | v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), | 
|  | v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), | 
|  | v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), | 
|  | static_cast<T>(v42_), static_cast<T>(v43_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray43& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | const T41 v41_; | 
|  | const T42 v42_; | 
|  | const T43 v43_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40, | 
|  | typename T41, typename T42, typename T43, typename T44> | 
|  | class ValueArray44 { | 
|  | public: | 
|  | ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, | 
|  | T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), | 
|  | v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), | 
|  | v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), | 
|  | v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), | 
|  | v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), | 
|  | v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), | 
|  | v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), | 
|  | v43_(v43), v44_(v44) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), | 
|  | static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray44& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | const T41 v41_; | 
|  | const T42 v42_; | 
|  | const T43 v43_; | 
|  | const T44 v44_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40, | 
|  | typename T41, typename T42, typename T43, typename T44, typename T45> | 
|  | class ValueArray45 { | 
|  | public: | 
|  | ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, | 
|  | T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), | 
|  | v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), | 
|  | v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), | 
|  | v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), | 
|  | v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), | 
|  | v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), | 
|  | v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), | 
|  | v42_(v42), v43_(v43), v44_(v44), v45_(v45) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), | 
|  | static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), | 
|  | static_cast<T>(v45_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray45& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | const T41 v41_; | 
|  | const T42 v42_; | 
|  | const T43 v43_; | 
|  | const T44 v44_; | 
|  | const T45 v45_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40, | 
|  | typename T41, typename T42, typename T43, typename T44, typename T45, | 
|  | typename T46> | 
|  | class ValueArray46 { | 
|  | public: | 
|  | ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, | 
|  | T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3), | 
|  | v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), | 
|  | v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), | 
|  | v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), | 
|  | v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), | 
|  | v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), | 
|  | v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), | 
|  | v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), | 
|  | static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), | 
|  | static_cast<T>(v45_), static_cast<T>(v46_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray46& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | const T41 v41_; | 
|  | const T42 v42_; | 
|  | const T43 v43_; | 
|  | const T44 v44_; | 
|  | const T45 v45_; | 
|  | const T46 v46_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40, | 
|  | typename T41, typename T42, typename T43, typename T44, typename T45, | 
|  | typename T46, typename T47> | 
|  | class ValueArray47 { | 
|  | public: | 
|  | ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, | 
|  | T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2), | 
|  | v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), | 
|  | v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), | 
|  | v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), | 
|  | v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), | 
|  | v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), | 
|  | v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), | 
|  | v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46), | 
|  | v47_(v47) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), | 
|  | static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), | 
|  | static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray47& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | const T41 v41_; | 
|  | const T42 v42_; | 
|  | const T43 v43_; | 
|  | const T44 v44_; | 
|  | const T45 v45_; | 
|  | const T46 v46_; | 
|  | const T47 v47_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40, | 
|  | typename T41, typename T42, typename T43, typename T44, typename T45, | 
|  | typename T46, typename T47, typename T48> | 
|  | class ValueArray48 { | 
|  | public: | 
|  | ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, | 
|  | T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1), | 
|  | v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), | 
|  | v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), | 
|  | v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), | 
|  | v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), | 
|  | v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), | 
|  | v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), | 
|  | v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), | 
|  | v46_(v46), v47_(v47), v48_(v48) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), | 
|  | static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), | 
|  | static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_), | 
|  | static_cast<T>(v48_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray48& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | const T41 v41_; | 
|  | const T42 v42_; | 
|  | const T43 v43_; | 
|  | const T44 v44_; | 
|  | const T45 v45_; | 
|  | const T46 v46_; | 
|  | const T47 v47_; | 
|  | const T48 v48_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40, | 
|  | typename T41, typename T42, typename T43, typename T44, typename T45, | 
|  | typename T46, typename T47, typename T48, typename T49> | 
|  | class ValueArray49 { | 
|  | public: | 
|  | ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, | 
|  | T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, | 
|  | T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), | 
|  | v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), | 
|  | v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), | 
|  | v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), | 
|  | v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), | 
|  | v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), | 
|  | v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), | 
|  | static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), | 
|  | static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_), | 
|  | static_cast<T>(v48_), static_cast<T>(v49_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray49& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | const T41 v41_; | 
|  | const T42 v42_; | 
|  | const T43 v43_; | 
|  | const T44 v44_; | 
|  | const T45 v45_; | 
|  | const T46 v46_; | 
|  | const T47 v47_; | 
|  | const T48 v48_; | 
|  | const T49 v49_; | 
|  | }; | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10, | 
|  | typename T11, typename T12, typename T13, typename T14, typename T15, | 
|  | typename T16, typename T17, typename T18, typename T19, typename T20, | 
|  | typename T21, typename T22, typename T23, typename T24, typename T25, | 
|  | typename T26, typename T27, typename T28, typename T29, typename T30, | 
|  | typename T31, typename T32, typename T33, typename T34, typename T35, | 
|  | typename T36, typename T37, typename T38, typename T39, typename T40, | 
|  | typename T41, typename T42, typename T43, typename T44, typename T45, | 
|  | typename T46, typename T47, typename T48, typename T49, typename T50> | 
|  | class ValueArray50 { | 
|  | public: | 
|  | ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, | 
|  | T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, | 
|  | T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, | 
|  | T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, | 
|  | T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, | 
|  | T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49, | 
|  | T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), | 
|  | v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), | 
|  | v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), | 
|  | v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), | 
|  | v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), | 
|  | v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), | 
|  | v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), | 
|  | v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {} | 
|  |  | 
|  | template <typename T> | 
|  | operator ParamGenerator<T>() const { | 
|  | const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_), | 
|  | static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_), | 
|  | static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_), | 
|  | static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_), | 
|  | static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_), | 
|  | static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_), | 
|  | static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_), | 
|  | static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_), | 
|  | static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_), | 
|  | static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_), | 
|  | static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_), | 
|  | static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_), | 
|  | static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_), | 
|  | static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_), | 
|  | static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_), | 
|  | static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_), | 
|  | static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)}; | 
|  | return ValuesIn(array); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const ValueArray50& other); | 
|  |  | 
|  | const T1 v1_; | 
|  | const T2 v2_; | 
|  | const T3 v3_; | 
|  | const T4 v4_; | 
|  | const T5 v5_; | 
|  | const T6 v6_; | 
|  | const T7 v7_; | 
|  | const T8 v8_; | 
|  | const T9 v9_; | 
|  | const T10 v10_; | 
|  | const T11 v11_; | 
|  | const T12 v12_; | 
|  | const T13 v13_; | 
|  | const T14 v14_; | 
|  | const T15 v15_; | 
|  | const T16 v16_; | 
|  | const T17 v17_; | 
|  | const T18 v18_; | 
|  | const T19 v19_; | 
|  | const T20 v20_; | 
|  | const T21 v21_; | 
|  | const T22 v22_; | 
|  | const T23 v23_; | 
|  | const T24 v24_; | 
|  | const T25 v25_; | 
|  | const T26 v26_; | 
|  | const T27 v27_; | 
|  | const T28 v28_; | 
|  | const T29 v29_; | 
|  | const T30 v30_; | 
|  | const T31 v31_; | 
|  | const T32 v32_; | 
|  | const T33 v33_; | 
|  | const T34 v34_; | 
|  | const T35 v35_; | 
|  | const T36 v36_; | 
|  | const T37 v37_; | 
|  | const T38 v38_; | 
|  | const T39 v39_; | 
|  | const T40 v40_; | 
|  | const T41 v41_; | 
|  | const T42 v42_; | 
|  | const T43 v43_; | 
|  | const T44 v44_; | 
|  | const T45 v45_; | 
|  | const T46 v46_; | 
|  | const T47 v47_; | 
|  | const T48 v48_; | 
|  | const T49 v49_; | 
|  | const T50 v50_; | 
|  | }; | 
|  |  | 
|  | # if GTEST_HAS_COMBINE | 
|  | // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. | 
|  | // | 
|  | // Generates values from the Cartesian product of values produced | 
|  | // by the argument generators. | 
|  | // | 
|  | template <typename T1, typename T2> | 
|  | class CartesianProductGenerator2 | 
|  | : public ParamGeneratorInterface< ::testing::tuple<T1, T2> > { | 
|  | public: | 
|  | typedef ::testing::tuple<T1, T2> ParamType; | 
|  |  | 
|  | CartesianProductGenerator2(const ParamGenerator<T1>& g1, | 
|  | const ParamGenerator<T2>& g2) | 
|  | : g1_(g1), g2_(g2) {} | 
|  | virtual ~CartesianProductGenerator2() {} | 
|  |  | 
|  | virtual ParamIteratorInterface<ParamType>* Begin() const { | 
|  | return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin()); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* End() const { | 
|  | return new Iterator(this, g1_, g1_.end(), g2_, g2_.end()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | class Iterator : public ParamIteratorInterface<ParamType> { | 
|  | public: | 
|  | Iterator(const ParamGeneratorInterface<ParamType>* base, | 
|  | const ParamGenerator<T1>& g1, | 
|  | const typename ParamGenerator<T1>::iterator& current1, | 
|  | const ParamGenerator<T2>& g2, | 
|  | const typename ParamGenerator<T2>::iterator& current2) | 
|  | : base_(base), | 
|  | begin1_(g1.begin()), end1_(g1.end()), current1_(current1), | 
|  | begin2_(g2.begin()), end2_(g2.end()), current2_(current2)    { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ~Iterator() {} | 
|  |  | 
|  | virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { | 
|  | return base_; | 
|  | } | 
|  | // Advance should not be called on beyond-of-range iterators | 
|  | // so no component iterators must be beyond end of range, either. | 
|  | virtual void Advance() { | 
|  | assert(!AtEnd()); | 
|  | ++current2_; | 
|  | if (current2_ == end2_) { | 
|  | current2_ = begin2_; | 
|  | ++current1_; | 
|  | } | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* Clone() const { | 
|  | return new Iterator(*this); | 
|  | } | 
|  | virtual const ParamType* Current() const { return ¤t_value_; } | 
|  | virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { | 
|  | // Having the same base generator guarantees that the other | 
|  | // iterator is of the same type and we can downcast. | 
|  | GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) | 
|  | << "The program attempted to compare iterators " | 
|  | << "from different generators." << std::endl; | 
|  | const Iterator* typed_other = | 
|  | CheckedDowncastToActualType<const Iterator>(&other); | 
|  | // We must report iterators equal if they both point beyond their | 
|  | // respective ranges. That can happen in a variety of fashions, | 
|  | // so we have to consult AtEnd(). | 
|  | return (AtEnd() && typed_other->AtEnd()) || | 
|  | ( | 
|  | current1_ == typed_other->current1_ && | 
|  | current2_ == typed_other->current2_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | Iterator(const Iterator& other) | 
|  | : base_(other.base_), | 
|  | begin1_(other.begin1_), | 
|  | end1_(other.end1_), | 
|  | current1_(other.current1_), | 
|  | begin2_(other.begin2_), | 
|  | end2_(other.end2_), | 
|  | current2_(other.current2_) { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  |  | 
|  | void ComputeCurrentValue() { | 
|  | if (!AtEnd()) | 
|  | current_value_ = ParamType(*current1_, *current2_); | 
|  | } | 
|  | bool AtEnd() const { | 
|  | // We must report iterator past the end of the range when either of the | 
|  | // component iterators has reached the end of its range. | 
|  | return | 
|  | current1_ == end1_ || | 
|  | current2_ == end2_; | 
|  | } | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const Iterator& other); | 
|  |  | 
|  | const ParamGeneratorInterface<ParamType>* const base_; | 
|  | // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. | 
|  | // current[i]_ is the actual traversing iterator. | 
|  | const typename ParamGenerator<T1>::iterator begin1_; | 
|  | const typename ParamGenerator<T1>::iterator end1_; | 
|  | typename ParamGenerator<T1>::iterator current1_; | 
|  | const typename ParamGenerator<T2>::iterator begin2_; | 
|  | const typename ParamGenerator<T2>::iterator end2_; | 
|  | typename ParamGenerator<T2>::iterator current2_; | 
|  | ParamType current_value_; | 
|  | };  // class CartesianProductGenerator2::Iterator | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductGenerator2& other); | 
|  |  | 
|  | const ParamGenerator<T1> g1_; | 
|  | const ParamGenerator<T2> g2_; | 
|  | };  // class CartesianProductGenerator2 | 
|  |  | 
|  |  | 
|  | template <typename T1, typename T2, typename T3> | 
|  | class CartesianProductGenerator3 | 
|  | : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3> > { | 
|  | public: | 
|  | typedef ::testing::tuple<T1, T2, T3> ParamType; | 
|  |  | 
|  | CartesianProductGenerator3(const ParamGenerator<T1>& g1, | 
|  | const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3) | 
|  | : g1_(g1), g2_(g2), g3_(g3) {} | 
|  | virtual ~CartesianProductGenerator3() {} | 
|  |  | 
|  | virtual ParamIteratorInterface<ParamType>* Begin() const { | 
|  | return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, | 
|  | g3_.begin()); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* End() const { | 
|  | return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | class Iterator : public ParamIteratorInterface<ParamType> { | 
|  | public: | 
|  | Iterator(const ParamGeneratorInterface<ParamType>* base, | 
|  | const ParamGenerator<T1>& g1, | 
|  | const typename ParamGenerator<T1>::iterator& current1, | 
|  | const ParamGenerator<T2>& g2, | 
|  | const typename ParamGenerator<T2>::iterator& current2, | 
|  | const ParamGenerator<T3>& g3, | 
|  | const typename ParamGenerator<T3>::iterator& current3) | 
|  | : base_(base), | 
|  | begin1_(g1.begin()), end1_(g1.end()), current1_(current1), | 
|  | begin2_(g2.begin()), end2_(g2.end()), current2_(current2), | 
|  | begin3_(g3.begin()), end3_(g3.end()), current3_(current3)    { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ~Iterator() {} | 
|  |  | 
|  | virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { | 
|  | return base_; | 
|  | } | 
|  | // Advance should not be called on beyond-of-range iterators | 
|  | // so no component iterators must be beyond end of range, either. | 
|  | virtual void Advance() { | 
|  | assert(!AtEnd()); | 
|  | ++current3_; | 
|  | if (current3_ == end3_) { | 
|  | current3_ = begin3_; | 
|  | ++current2_; | 
|  | } | 
|  | if (current2_ == end2_) { | 
|  | current2_ = begin2_; | 
|  | ++current1_; | 
|  | } | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* Clone() const { | 
|  | return new Iterator(*this); | 
|  | } | 
|  | virtual const ParamType* Current() const { return ¤t_value_; } | 
|  | virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { | 
|  | // Having the same base generator guarantees that the other | 
|  | // iterator is of the same type and we can downcast. | 
|  | GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) | 
|  | << "The program attempted to compare iterators " | 
|  | << "from different generators." << std::endl; | 
|  | const Iterator* typed_other = | 
|  | CheckedDowncastToActualType<const Iterator>(&other); | 
|  | // We must report iterators equal if they both point beyond their | 
|  | // respective ranges. That can happen in a variety of fashions, | 
|  | // so we have to consult AtEnd(). | 
|  | return (AtEnd() && typed_other->AtEnd()) || | 
|  | ( | 
|  | current1_ == typed_other->current1_ && | 
|  | current2_ == typed_other->current2_ && | 
|  | current3_ == typed_other->current3_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | Iterator(const Iterator& other) | 
|  | : base_(other.base_), | 
|  | begin1_(other.begin1_), | 
|  | end1_(other.end1_), | 
|  | current1_(other.current1_), | 
|  | begin2_(other.begin2_), | 
|  | end2_(other.end2_), | 
|  | current2_(other.current2_), | 
|  | begin3_(other.begin3_), | 
|  | end3_(other.end3_), | 
|  | current3_(other.current3_) { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  |  | 
|  | void ComputeCurrentValue() { | 
|  | if (!AtEnd()) | 
|  | current_value_ = ParamType(*current1_, *current2_, *current3_); | 
|  | } | 
|  | bool AtEnd() const { | 
|  | // We must report iterator past the end of the range when either of the | 
|  | // component iterators has reached the end of its range. | 
|  | return | 
|  | current1_ == end1_ || | 
|  | current2_ == end2_ || | 
|  | current3_ == end3_; | 
|  | } | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const Iterator& other); | 
|  |  | 
|  | const ParamGeneratorInterface<ParamType>* const base_; | 
|  | // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. | 
|  | // current[i]_ is the actual traversing iterator. | 
|  | const typename ParamGenerator<T1>::iterator begin1_; | 
|  | const typename ParamGenerator<T1>::iterator end1_; | 
|  | typename ParamGenerator<T1>::iterator current1_; | 
|  | const typename ParamGenerator<T2>::iterator begin2_; | 
|  | const typename ParamGenerator<T2>::iterator end2_; | 
|  | typename ParamGenerator<T2>::iterator current2_; | 
|  | const typename ParamGenerator<T3>::iterator begin3_; | 
|  | const typename ParamGenerator<T3>::iterator end3_; | 
|  | typename ParamGenerator<T3>::iterator current3_; | 
|  | ParamType current_value_; | 
|  | };  // class CartesianProductGenerator3::Iterator | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductGenerator3& other); | 
|  |  | 
|  | const ParamGenerator<T1> g1_; | 
|  | const ParamGenerator<T2> g2_; | 
|  | const ParamGenerator<T3> g3_; | 
|  | };  // class CartesianProductGenerator3 | 
|  |  | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4> | 
|  | class CartesianProductGenerator4 | 
|  | : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4> > { | 
|  | public: | 
|  | typedef ::testing::tuple<T1, T2, T3, T4> ParamType; | 
|  |  | 
|  | CartesianProductGenerator4(const ParamGenerator<T1>& g1, | 
|  | const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, | 
|  | const ParamGenerator<T4>& g4) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} | 
|  | virtual ~CartesianProductGenerator4() {} | 
|  |  | 
|  | virtual ParamIteratorInterface<ParamType>* Begin() const { | 
|  | return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, | 
|  | g3_.begin(), g4_, g4_.begin()); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* End() const { | 
|  | return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), | 
|  | g4_, g4_.end()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | class Iterator : public ParamIteratorInterface<ParamType> { | 
|  | public: | 
|  | Iterator(const ParamGeneratorInterface<ParamType>* base, | 
|  | const ParamGenerator<T1>& g1, | 
|  | const typename ParamGenerator<T1>::iterator& current1, | 
|  | const ParamGenerator<T2>& g2, | 
|  | const typename ParamGenerator<T2>::iterator& current2, | 
|  | const ParamGenerator<T3>& g3, | 
|  | const typename ParamGenerator<T3>::iterator& current3, | 
|  | const ParamGenerator<T4>& g4, | 
|  | const typename ParamGenerator<T4>::iterator& current4) | 
|  | : base_(base), | 
|  | begin1_(g1.begin()), end1_(g1.end()), current1_(current1), | 
|  | begin2_(g2.begin()), end2_(g2.end()), current2_(current2), | 
|  | begin3_(g3.begin()), end3_(g3.end()), current3_(current3), | 
|  | begin4_(g4.begin()), end4_(g4.end()), current4_(current4)    { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ~Iterator() {} | 
|  |  | 
|  | virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { | 
|  | return base_; | 
|  | } | 
|  | // Advance should not be called on beyond-of-range iterators | 
|  | // so no component iterators must be beyond end of range, either. | 
|  | virtual void Advance() { | 
|  | assert(!AtEnd()); | 
|  | ++current4_; | 
|  | if (current4_ == end4_) { | 
|  | current4_ = begin4_; | 
|  | ++current3_; | 
|  | } | 
|  | if (current3_ == end3_) { | 
|  | current3_ = begin3_; | 
|  | ++current2_; | 
|  | } | 
|  | if (current2_ == end2_) { | 
|  | current2_ = begin2_; | 
|  | ++current1_; | 
|  | } | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* Clone() const { | 
|  | return new Iterator(*this); | 
|  | } | 
|  | virtual const ParamType* Current() const { return ¤t_value_; } | 
|  | virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { | 
|  | // Having the same base generator guarantees that the other | 
|  | // iterator is of the same type and we can downcast. | 
|  | GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) | 
|  | << "The program attempted to compare iterators " | 
|  | << "from different generators." << std::endl; | 
|  | const Iterator* typed_other = | 
|  | CheckedDowncastToActualType<const Iterator>(&other); | 
|  | // We must report iterators equal if they both point beyond their | 
|  | // respective ranges. That can happen in a variety of fashions, | 
|  | // so we have to consult AtEnd(). | 
|  | return (AtEnd() && typed_other->AtEnd()) || | 
|  | ( | 
|  | current1_ == typed_other->current1_ && | 
|  | current2_ == typed_other->current2_ && | 
|  | current3_ == typed_other->current3_ && | 
|  | current4_ == typed_other->current4_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | Iterator(const Iterator& other) | 
|  | : base_(other.base_), | 
|  | begin1_(other.begin1_), | 
|  | end1_(other.end1_), | 
|  | current1_(other.current1_), | 
|  | begin2_(other.begin2_), | 
|  | end2_(other.end2_), | 
|  | current2_(other.current2_), | 
|  | begin3_(other.begin3_), | 
|  | end3_(other.end3_), | 
|  | current3_(other.current3_), | 
|  | begin4_(other.begin4_), | 
|  | end4_(other.end4_), | 
|  | current4_(other.current4_) { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  |  | 
|  | void ComputeCurrentValue() { | 
|  | if (!AtEnd()) | 
|  | current_value_ = ParamType(*current1_, *current2_, *current3_, | 
|  | *current4_); | 
|  | } | 
|  | bool AtEnd() const { | 
|  | // We must report iterator past the end of the range when either of the | 
|  | // component iterators has reached the end of its range. | 
|  | return | 
|  | current1_ == end1_ || | 
|  | current2_ == end2_ || | 
|  | current3_ == end3_ || | 
|  | current4_ == end4_; | 
|  | } | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const Iterator& other); | 
|  |  | 
|  | const ParamGeneratorInterface<ParamType>* const base_; | 
|  | // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. | 
|  | // current[i]_ is the actual traversing iterator. | 
|  | const typename ParamGenerator<T1>::iterator begin1_; | 
|  | const typename ParamGenerator<T1>::iterator end1_; | 
|  | typename ParamGenerator<T1>::iterator current1_; | 
|  | const typename ParamGenerator<T2>::iterator begin2_; | 
|  | const typename ParamGenerator<T2>::iterator end2_; | 
|  | typename ParamGenerator<T2>::iterator current2_; | 
|  | const typename ParamGenerator<T3>::iterator begin3_; | 
|  | const typename ParamGenerator<T3>::iterator end3_; | 
|  | typename ParamGenerator<T3>::iterator current3_; | 
|  | const typename ParamGenerator<T4>::iterator begin4_; | 
|  | const typename ParamGenerator<T4>::iterator end4_; | 
|  | typename ParamGenerator<T4>::iterator current4_; | 
|  | ParamType current_value_; | 
|  | };  // class CartesianProductGenerator4::Iterator | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductGenerator4& other); | 
|  |  | 
|  | const ParamGenerator<T1> g1_; | 
|  | const ParamGenerator<T2> g2_; | 
|  | const ParamGenerator<T3> g3_; | 
|  | const ParamGenerator<T4> g4_; | 
|  | };  // class CartesianProductGenerator4 | 
|  |  | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5> | 
|  | class CartesianProductGenerator5 | 
|  | : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5> > { | 
|  | public: | 
|  | typedef ::testing::tuple<T1, T2, T3, T4, T5> ParamType; | 
|  |  | 
|  | CartesianProductGenerator5(const ParamGenerator<T1>& g1, | 
|  | const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, | 
|  | const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} | 
|  | virtual ~CartesianProductGenerator5() {} | 
|  |  | 
|  | virtual ParamIteratorInterface<ParamType>* Begin() const { | 
|  | return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, | 
|  | g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin()); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* End() const { | 
|  | return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), | 
|  | g4_, g4_.end(), g5_, g5_.end()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | class Iterator : public ParamIteratorInterface<ParamType> { | 
|  | public: | 
|  | Iterator(const ParamGeneratorInterface<ParamType>* base, | 
|  | const ParamGenerator<T1>& g1, | 
|  | const typename ParamGenerator<T1>::iterator& current1, | 
|  | const ParamGenerator<T2>& g2, | 
|  | const typename ParamGenerator<T2>::iterator& current2, | 
|  | const ParamGenerator<T3>& g3, | 
|  | const typename ParamGenerator<T3>::iterator& current3, | 
|  | const ParamGenerator<T4>& g4, | 
|  | const typename ParamGenerator<T4>::iterator& current4, | 
|  | const ParamGenerator<T5>& g5, | 
|  | const typename ParamGenerator<T5>::iterator& current5) | 
|  | : base_(base), | 
|  | begin1_(g1.begin()), end1_(g1.end()), current1_(current1), | 
|  | begin2_(g2.begin()), end2_(g2.end()), current2_(current2), | 
|  | begin3_(g3.begin()), end3_(g3.end()), current3_(current3), | 
|  | begin4_(g4.begin()), end4_(g4.end()), current4_(current4), | 
|  | begin5_(g5.begin()), end5_(g5.end()), current5_(current5)    { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ~Iterator() {} | 
|  |  | 
|  | virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { | 
|  | return base_; | 
|  | } | 
|  | // Advance should not be called on beyond-of-range iterators | 
|  | // so no component iterators must be beyond end of range, either. | 
|  | virtual void Advance() { | 
|  | assert(!AtEnd()); | 
|  | ++current5_; | 
|  | if (current5_ == end5_) { | 
|  | current5_ = begin5_; | 
|  | ++current4_; | 
|  | } | 
|  | if (current4_ == end4_) { | 
|  | current4_ = begin4_; | 
|  | ++current3_; | 
|  | } | 
|  | if (current3_ == end3_) { | 
|  | current3_ = begin3_; | 
|  | ++current2_; | 
|  | } | 
|  | if (current2_ == end2_) { | 
|  | current2_ = begin2_; | 
|  | ++current1_; | 
|  | } | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* Clone() const { | 
|  | return new Iterator(*this); | 
|  | } | 
|  | virtual const ParamType* Current() const { return ¤t_value_; } | 
|  | virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { | 
|  | // Having the same base generator guarantees that the other | 
|  | // iterator is of the same type and we can downcast. | 
|  | GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) | 
|  | << "The program attempted to compare iterators " | 
|  | << "from different generators." << std::endl; | 
|  | const Iterator* typed_other = | 
|  | CheckedDowncastToActualType<const Iterator>(&other); | 
|  | // We must report iterators equal if they both point beyond their | 
|  | // respective ranges. That can happen in a variety of fashions, | 
|  | // so we have to consult AtEnd(). | 
|  | return (AtEnd() && typed_other->AtEnd()) || | 
|  | ( | 
|  | current1_ == typed_other->current1_ && | 
|  | current2_ == typed_other->current2_ && | 
|  | current3_ == typed_other->current3_ && | 
|  | current4_ == typed_other->current4_ && | 
|  | current5_ == typed_other->current5_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | Iterator(const Iterator& other) | 
|  | : base_(other.base_), | 
|  | begin1_(other.begin1_), | 
|  | end1_(other.end1_), | 
|  | current1_(other.current1_), | 
|  | begin2_(other.begin2_), | 
|  | end2_(other.end2_), | 
|  | current2_(other.current2_), | 
|  | begin3_(other.begin3_), | 
|  | end3_(other.end3_), | 
|  | current3_(other.current3_), | 
|  | begin4_(other.begin4_), | 
|  | end4_(other.end4_), | 
|  | current4_(other.current4_), | 
|  | begin5_(other.begin5_), | 
|  | end5_(other.end5_), | 
|  | current5_(other.current5_) { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  |  | 
|  | void ComputeCurrentValue() { | 
|  | if (!AtEnd()) | 
|  | current_value_ = ParamType(*current1_, *current2_, *current3_, | 
|  | *current4_, *current5_); | 
|  | } | 
|  | bool AtEnd() const { | 
|  | // We must report iterator past the end of the range when either of the | 
|  | // component iterators has reached the end of its range. | 
|  | return | 
|  | current1_ == end1_ || | 
|  | current2_ == end2_ || | 
|  | current3_ == end3_ || | 
|  | current4_ == end4_ || | 
|  | current5_ == end5_; | 
|  | } | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const Iterator& other); | 
|  |  | 
|  | const ParamGeneratorInterface<ParamType>* const base_; | 
|  | // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. | 
|  | // current[i]_ is the actual traversing iterator. | 
|  | const typename ParamGenerator<T1>::iterator begin1_; | 
|  | const typename ParamGenerator<T1>::iterator end1_; | 
|  | typename ParamGenerator<T1>::iterator current1_; | 
|  | const typename ParamGenerator<T2>::iterator begin2_; | 
|  | const typename ParamGenerator<T2>::iterator end2_; | 
|  | typename ParamGenerator<T2>::iterator current2_; | 
|  | const typename ParamGenerator<T3>::iterator begin3_; | 
|  | const typename ParamGenerator<T3>::iterator end3_; | 
|  | typename ParamGenerator<T3>::iterator current3_; | 
|  | const typename ParamGenerator<T4>::iterator begin4_; | 
|  | const typename ParamGenerator<T4>::iterator end4_; | 
|  | typename ParamGenerator<T4>::iterator current4_; | 
|  | const typename ParamGenerator<T5>::iterator begin5_; | 
|  | const typename ParamGenerator<T5>::iterator end5_; | 
|  | typename ParamGenerator<T5>::iterator current5_; | 
|  | ParamType current_value_; | 
|  | };  // class CartesianProductGenerator5::Iterator | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductGenerator5& other); | 
|  |  | 
|  | const ParamGenerator<T1> g1_; | 
|  | const ParamGenerator<T2> g2_; | 
|  | const ParamGenerator<T3> g3_; | 
|  | const ParamGenerator<T4> g4_; | 
|  | const ParamGenerator<T5> g5_; | 
|  | };  // class CartesianProductGenerator5 | 
|  |  | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6> | 
|  | class CartesianProductGenerator6 | 
|  | : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, | 
|  | T6> > { | 
|  | public: | 
|  | typedef ::testing::tuple<T1, T2, T3, T4, T5, T6> ParamType; | 
|  |  | 
|  | CartesianProductGenerator6(const ParamGenerator<T1>& g1, | 
|  | const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, | 
|  | const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, | 
|  | const ParamGenerator<T6>& g6) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} | 
|  | virtual ~CartesianProductGenerator6() {} | 
|  |  | 
|  | virtual ParamIteratorInterface<ParamType>* Begin() const { | 
|  | return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, | 
|  | g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin()); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* End() const { | 
|  | return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), | 
|  | g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | class Iterator : public ParamIteratorInterface<ParamType> { | 
|  | public: | 
|  | Iterator(const ParamGeneratorInterface<ParamType>* base, | 
|  | const ParamGenerator<T1>& g1, | 
|  | const typename ParamGenerator<T1>::iterator& current1, | 
|  | const ParamGenerator<T2>& g2, | 
|  | const typename ParamGenerator<T2>::iterator& current2, | 
|  | const ParamGenerator<T3>& g3, | 
|  | const typename ParamGenerator<T3>::iterator& current3, | 
|  | const ParamGenerator<T4>& g4, | 
|  | const typename ParamGenerator<T4>::iterator& current4, | 
|  | const ParamGenerator<T5>& g5, | 
|  | const typename ParamGenerator<T5>::iterator& current5, | 
|  | const ParamGenerator<T6>& g6, | 
|  | const typename ParamGenerator<T6>::iterator& current6) | 
|  | : base_(base), | 
|  | begin1_(g1.begin()), end1_(g1.end()), current1_(current1), | 
|  | begin2_(g2.begin()), end2_(g2.end()), current2_(current2), | 
|  | begin3_(g3.begin()), end3_(g3.end()), current3_(current3), | 
|  | begin4_(g4.begin()), end4_(g4.end()), current4_(current4), | 
|  | begin5_(g5.begin()), end5_(g5.end()), current5_(current5), | 
|  | begin6_(g6.begin()), end6_(g6.end()), current6_(current6)    { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ~Iterator() {} | 
|  |  | 
|  | virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { | 
|  | return base_; | 
|  | } | 
|  | // Advance should not be called on beyond-of-range iterators | 
|  | // so no component iterators must be beyond end of range, either. | 
|  | virtual void Advance() { | 
|  | assert(!AtEnd()); | 
|  | ++current6_; | 
|  | if (current6_ == end6_) { | 
|  | current6_ = begin6_; | 
|  | ++current5_; | 
|  | } | 
|  | if (current5_ == end5_) { | 
|  | current5_ = begin5_; | 
|  | ++current4_; | 
|  | } | 
|  | if (current4_ == end4_) { | 
|  | current4_ = begin4_; | 
|  | ++current3_; | 
|  | } | 
|  | if (current3_ == end3_) { | 
|  | current3_ = begin3_; | 
|  | ++current2_; | 
|  | } | 
|  | if (current2_ == end2_) { | 
|  | current2_ = begin2_; | 
|  | ++current1_; | 
|  | } | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* Clone() const { | 
|  | return new Iterator(*this); | 
|  | } | 
|  | virtual const ParamType* Current() const { return ¤t_value_; } | 
|  | virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { | 
|  | // Having the same base generator guarantees that the other | 
|  | // iterator is of the same type and we can downcast. | 
|  | GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) | 
|  | << "The program attempted to compare iterators " | 
|  | << "from different generators." << std::endl; | 
|  | const Iterator* typed_other = | 
|  | CheckedDowncastToActualType<const Iterator>(&other); | 
|  | // We must report iterators equal if they both point beyond their | 
|  | // respective ranges. That can happen in a variety of fashions, | 
|  | // so we have to consult AtEnd(). | 
|  | return (AtEnd() && typed_other->AtEnd()) || | 
|  | ( | 
|  | current1_ == typed_other->current1_ && | 
|  | current2_ == typed_other->current2_ && | 
|  | current3_ == typed_other->current3_ && | 
|  | current4_ == typed_other->current4_ && | 
|  | current5_ == typed_other->current5_ && | 
|  | current6_ == typed_other->current6_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | Iterator(const Iterator& other) | 
|  | : base_(other.base_), | 
|  | begin1_(other.begin1_), | 
|  | end1_(other.end1_), | 
|  | current1_(other.current1_), | 
|  | begin2_(other.begin2_), | 
|  | end2_(other.end2_), | 
|  | current2_(other.current2_), | 
|  | begin3_(other.begin3_), | 
|  | end3_(other.end3_), | 
|  | current3_(other.current3_), | 
|  | begin4_(other.begin4_), | 
|  | end4_(other.end4_), | 
|  | current4_(other.current4_), | 
|  | begin5_(other.begin5_), | 
|  | end5_(other.end5_), | 
|  | current5_(other.current5_), | 
|  | begin6_(other.begin6_), | 
|  | end6_(other.end6_), | 
|  | current6_(other.current6_) { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  |  | 
|  | void ComputeCurrentValue() { | 
|  | if (!AtEnd()) | 
|  | current_value_ = ParamType(*current1_, *current2_, *current3_, | 
|  | *current4_, *current5_, *current6_); | 
|  | } | 
|  | bool AtEnd() const { | 
|  | // We must report iterator past the end of the range when either of the | 
|  | // component iterators has reached the end of its range. | 
|  | return | 
|  | current1_ == end1_ || | 
|  | current2_ == end2_ || | 
|  | current3_ == end3_ || | 
|  | current4_ == end4_ || | 
|  | current5_ == end5_ || | 
|  | current6_ == end6_; | 
|  | } | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const Iterator& other); | 
|  |  | 
|  | const ParamGeneratorInterface<ParamType>* const base_; | 
|  | // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. | 
|  | // current[i]_ is the actual traversing iterator. | 
|  | const typename ParamGenerator<T1>::iterator begin1_; | 
|  | const typename ParamGenerator<T1>::iterator end1_; | 
|  | typename ParamGenerator<T1>::iterator current1_; | 
|  | const typename ParamGenerator<T2>::iterator begin2_; | 
|  | const typename ParamGenerator<T2>::iterator end2_; | 
|  | typename ParamGenerator<T2>::iterator current2_; | 
|  | const typename ParamGenerator<T3>::iterator begin3_; | 
|  | const typename ParamGenerator<T3>::iterator end3_; | 
|  | typename ParamGenerator<T3>::iterator current3_; | 
|  | const typename ParamGenerator<T4>::iterator begin4_; | 
|  | const typename ParamGenerator<T4>::iterator end4_; | 
|  | typename ParamGenerator<T4>::iterator current4_; | 
|  | const typename ParamGenerator<T5>::iterator begin5_; | 
|  | const typename ParamGenerator<T5>::iterator end5_; | 
|  | typename ParamGenerator<T5>::iterator current5_; | 
|  | const typename ParamGenerator<T6>::iterator begin6_; | 
|  | const typename ParamGenerator<T6>::iterator end6_; | 
|  | typename ParamGenerator<T6>::iterator current6_; | 
|  | ParamType current_value_; | 
|  | };  // class CartesianProductGenerator6::Iterator | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductGenerator6& other); | 
|  |  | 
|  | const ParamGenerator<T1> g1_; | 
|  | const ParamGenerator<T2> g2_; | 
|  | const ParamGenerator<T3> g3_; | 
|  | const ParamGenerator<T4> g4_; | 
|  | const ParamGenerator<T5> g5_; | 
|  | const ParamGenerator<T6> g6_; | 
|  | };  // class CartesianProductGenerator6 | 
|  |  | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7> | 
|  | class CartesianProductGenerator7 | 
|  | : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, | 
|  | T7> > { | 
|  | public: | 
|  | typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType; | 
|  |  | 
|  | CartesianProductGenerator7(const ParamGenerator<T1>& g1, | 
|  | const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, | 
|  | const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, | 
|  | const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} | 
|  | virtual ~CartesianProductGenerator7() {} | 
|  |  | 
|  | virtual ParamIteratorInterface<ParamType>* Begin() const { | 
|  | return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, | 
|  | g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, | 
|  | g7_.begin()); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* End() const { | 
|  | return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), | 
|  | g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | class Iterator : public ParamIteratorInterface<ParamType> { | 
|  | public: | 
|  | Iterator(const ParamGeneratorInterface<ParamType>* base, | 
|  | const ParamGenerator<T1>& g1, | 
|  | const typename ParamGenerator<T1>::iterator& current1, | 
|  | const ParamGenerator<T2>& g2, | 
|  | const typename ParamGenerator<T2>::iterator& current2, | 
|  | const ParamGenerator<T3>& g3, | 
|  | const typename ParamGenerator<T3>::iterator& current3, | 
|  | const ParamGenerator<T4>& g4, | 
|  | const typename ParamGenerator<T4>::iterator& current4, | 
|  | const ParamGenerator<T5>& g5, | 
|  | const typename ParamGenerator<T5>::iterator& current5, | 
|  | const ParamGenerator<T6>& g6, | 
|  | const typename ParamGenerator<T6>::iterator& current6, | 
|  | const ParamGenerator<T7>& g7, | 
|  | const typename ParamGenerator<T7>::iterator& current7) | 
|  | : base_(base), | 
|  | begin1_(g1.begin()), end1_(g1.end()), current1_(current1), | 
|  | begin2_(g2.begin()), end2_(g2.end()), current2_(current2), | 
|  | begin3_(g3.begin()), end3_(g3.end()), current3_(current3), | 
|  | begin4_(g4.begin()), end4_(g4.end()), current4_(current4), | 
|  | begin5_(g5.begin()), end5_(g5.end()), current5_(current5), | 
|  | begin6_(g6.begin()), end6_(g6.end()), current6_(current6), | 
|  | begin7_(g7.begin()), end7_(g7.end()), current7_(current7)    { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ~Iterator() {} | 
|  |  | 
|  | virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { | 
|  | return base_; | 
|  | } | 
|  | // Advance should not be called on beyond-of-range iterators | 
|  | // so no component iterators must be beyond end of range, either. | 
|  | virtual void Advance() { | 
|  | assert(!AtEnd()); | 
|  | ++current7_; | 
|  | if (current7_ == end7_) { | 
|  | current7_ = begin7_; | 
|  | ++current6_; | 
|  | } | 
|  | if (current6_ == end6_) { | 
|  | current6_ = begin6_; | 
|  | ++current5_; | 
|  | } | 
|  | if (current5_ == end5_) { | 
|  | current5_ = begin5_; | 
|  | ++current4_; | 
|  | } | 
|  | if (current4_ == end4_) { | 
|  | current4_ = begin4_; | 
|  | ++current3_; | 
|  | } | 
|  | if (current3_ == end3_) { | 
|  | current3_ = begin3_; | 
|  | ++current2_; | 
|  | } | 
|  | if (current2_ == end2_) { | 
|  | current2_ = begin2_; | 
|  | ++current1_; | 
|  | } | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* Clone() const { | 
|  | return new Iterator(*this); | 
|  | } | 
|  | virtual const ParamType* Current() const { return ¤t_value_; } | 
|  | virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { | 
|  | // Having the same base generator guarantees that the other | 
|  | // iterator is of the same type and we can downcast. | 
|  | GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) | 
|  | << "The program attempted to compare iterators " | 
|  | << "from different generators." << std::endl; | 
|  | const Iterator* typed_other = | 
|  | CheckedDowncastToActualType<const Iterator>(&other); | 
|  | // We must report iterators equal if they both point beyond their | 
|  | // respective ranges. That can happen in a variety of fashions, | 
|  | // so we have to consult AtEnd(). | 
|  | return (AtEnd() && typed_other->AtEnd()) || | 
|  | ( | 
|  | current1_ == typed_other->current1_ && | 
|  | current2_ == typed_other->current2_ && | 
|  | current3_ == typed_other->current3_ && | 
|  | current4_ == typed_other->current4_ && | 
|  | current5_ == typed_other->current5_ && | 
|  | current6_ == typed_other->current6_ && | 
|  | current7_ == typed_other->current7_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | Iterator(const Iterator& other) | 
|  | : base_(other.base_), | 
|  | begin1_(other.begin1_), | 
|  | end1_(other.end1_), | 
|  | current1_(other.current1_), | 
|  | begin2_(other.begin2_), | 
|  | end2_(other.end2_), | 
|  | current2_(other.current2_), | 
|  | begin3_(other.begin3_), | 
|  | end3_(other.end3_), | 
|  | current3_(other.current3_), | 
|  | begin4_(other.begin4_), | 
|  | end4_(other.end4_), | 
|  | current4_(other.current4_), | 
|  | begin5_(other.begin5_), | 
|  | end5_(other.end5_), | 
|  | current5_(other.current5_), | 
|  | begin6_(other.begin6_), | 
|  | end6_(other.end6_), | 
|  | current6_(other.current6_), | 
|  | begin7_(other.begin7_), | 
|  | end7_(other.end7_), | 
|  | current7_(other.current7_) { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  |  | 
|  | void ComputeCurrentValue() { | 
|  | if (!AtEnd()) | 
|  | current_value_ = ParamType(*current1_, *current2_, *current3_, | 
|  | *current4_, *current5_, *current6_, *current7_); | 
|  | } | 
|  | bool AtEnd() const { | 
|  | // We must report iterator past the end of the range when either of the | 
|  | // component iterators has reached the end of its range. | 
|  | return | 
|  | current1_ == end1_ || | 
|  | current2_ == end2_ || | 
|  | current3_ == end3_ || | 
|  | current4_ == end4_ || | 
|  | current5_ == end5_ || | 
|  | current6_ == end6_ || | 
|  | current7_ == end7_; | 
|  | } | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const Iterator& other); | 
|  |  | 
|  | const ParamGeneratorInterface<ParamType>* const base_; | 
|  | // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. | 
|  | // current[i]_ is the actual traversing iterator. | 
|  | const typename ParamGenerator<T1>::iterator begin1_; | 
|  | const typename ParamGenerator<T1>::iterator end1_; | 
|  | typename ParamGenerator<T1>::iterator current1_; | 
|  | const typename ParamGenerator<T2>::iterator begin2_; | 
|  | const typename ParamGenerator<T2>::iterator end2_; | 
|  | typename ParamGenerator<T2>::iterator current2_; | 
|  | const typename ParamGenerator<T3>::iterator begin3_; | 
|  | const typename ParamGenerator<T3>::iterator end3_; | 
|  | typename ParamGenerator<T3>::iterator current3_; | 
|  | const typename ParamGenerator<T4>::iterator begin4_; | 
|  | const typename ParamGenerator<T4>::iterator end4_; | 
|  | typename ParamGenerator<T4>::iterator current4_; | 
|  | const typename ParamGenerator<T5>::iterator begin5_; | 
|  | const typename ParamGenerator<T5>::iterator end5_; | 
|  | typename ParamGenerator<T5>::iterator current5_; | 
|  | const typename ParamGenerator<T6>::iterator begin6_; | 
|  | const typename ParamGenerator<T6>::iterator end6_; | 
|  | typename ParamGenerator<T6>::iterator current6_; | 
|  | const typename ParamGenerator<T7>::iterator begin7_; | 
|  | const typename ParamGenerator<T7>::iterator end7_; | 
|  | typename ParamGenerator<T7>::iterator current7_; | 
|  | ParamType current_value_; | 
|  | };  // class CartesianProductGenerator7::Iterator | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductGenerator7& other); | 
|  |  | 
|  | const ParamGenerator<T1> g1_; | 
|  | const ParamGenerator<T2> g2_; | 
|  | const ParamGenerator<T3> g3_; | 
|  | const ParamGenerator<T4> g4_; | 
|  | const ParamGenerator<T5> g5_; | 
|  | const ParamGenerator<T6> g6_; | 
|  | const ParamGenerator<T7> g7_; | 
|  | };  // class CartesianProductGenerator7 | 
|  |  | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8> | 
|  | class CartesianProductGenerator8 | 
|  | : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, | 
|  | T7, T8> > { | 
|  | public: | 
|  | typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType; | 
|  |  | 
|  | CartesianProductGenerator8(const ParamGenerator<T1>& g1, | 
|  | const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, | 
|  | const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, | 
|  | const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, | 
|  | const ParamGenerator<T8>& g8) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), | 
|  | g8_(g8) {} | 
|  | virtual ~CartesianProductGenerator8() {} | 
|  |  | 
|  | virtual ParamIteratorInterface<ParamType>* Begin() const { | 
|  | return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, | 
|  | g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, | 
|  | g7_.begin(), g8_, g8_.begin()); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* End() const { | 
|  | return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), | 
|  | g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, | 
|  | g8_.end()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | class Iterator : public ParamIteratorInterface<ParamType> { | 
|  | public: | 
|  | Iterator(const ParamGeneratorInterface<ParamType>* base, | 
|  | const ParamGenerator<T1>& g1, | 
|  | const typename ParamGenerator<T1>::iterator& current1, | 
|  | const ParamGenerator<T2>& g2, | 
|  | const typename ParamGenerator<T2>::iterator& current2, | 
|  | const ParamGenerator<T3>& g3, | 
|  | const typename ParamGenerator<T3>::iterator& current3, | 
|  | const ParamGenerator<T4>& g4, | 
|  | const typename ParamGenerator<T4>::iterator& current4, | 
|  | const ParamGenerator<T5>& g5, | 
|  | const typename ParamGenerator<T5>::iterator& current5, | 
|  | const ParamGenerator<T6>& g6, | 
|  | const typename ParamGenerator<T6>::iterator& current6, | 
|  | const ParamGenerator<T7>& g7, | 
|  | const typename ParamGenerator<T7>::iterator& current7, | 
|  | const ParamGenerator<T8>& g8, | 
|  | const typename ParamGenerator<T8>::iterator& current8) | 
|  | : base_(base), | 
|  | begin1_(g1.begin()), end1_(g1.end()), current1_(current1), | 
|  | begin2_(g2.begin()), end2_(g2.end()), current2_(current2), | 
|  | begin3_(g3.begin()), end3_(g3.end()), current3_(current3), | 
|  | begin4_(g4.begin()), end4_(g4.end()), current4_(current4), | 
|  | begin5_(g5.begin()), end5_(g5.end()), current5_(current5), | 
|  | begin6_(g6.begin()), end6_(g6.end()), current6_(current6), | 
|  | begin7_(g7.begin()), end7_(g7.end()), current7_(current7), | 
|  | begin8_(g8.begin()), end8_(g8.end()), current8_(current8)    { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ~Iterator() {} | 
|  |  | 
|  | virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { | 
|  | return base_; | 
|  | } | 
|  | // Advance should not be called on beyond-of-range iterators | 
|  | // so no component iterators must be beyond end of range, either. | 
|  | virtual void Advance() { | 
|  | assert(!AtEnd()); | 
|  | ++current8_; | 
|  | if (current8_ == end8_) { | 
|  | current8_ = begin8_; | 
|  | ++current7_; | 
|  | } | 
|  | if (current7_ == end7_) { | 
|  | current7_ = begin7_; | 
|  | ++current6_; | 
|  | } | 
|  | if (current6_ == end6_) { | 
|  | current6_ = begin6_; | 
|  | ++current5_; | 
|  | } | 
|  | if (current5_ == end5_) { | 
|  | current5_ = begin5_; | 
|  | ++current4_; | 
|  | } | 
|  | if (current4_ == end4_) { | 
|  | current4_ = begin4_; | 
|  | ++current3_; | 
|  | } | 
|  | if (current3_ == end3_) { | 
|  | current3_ = begin3_; | 
|  | ++current2_; | 
|  | } | 
|  | if (current2_ == end2_) { | 
|  | current2_ = begin2_; | 
|  | ++current1_; | 
|  | } | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* Clone() const { | 
|  | return new Iterator(*this); | 
|  | } | 
|  | virtual const ParamType* Current() const { return ¤t_value_; } | 
|  | virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { | 
|  | // Having the same base generator guarantees that the other | 
|  | // iterator is of the same type and we can downcast. | 
|  | GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) | 
|  | << "The program attempted to compare iterators " | 
|  | << "from different generators." << std::endl; | 
|  | const Iterator* typed_other = | 
|  | CheckedDowncastToActualType<const Iterator>(&other); | 
|  | // We must report iterators equal if they both point beyond their | 
|  | // respective ranges. That can happen in a variety of fashions, | 
|  | // so we have to consult AtEnd(). | 
|  | return (AtEnd() && typed_other->AtEnd()) || | 
|  | ( | 
|  | current1_ == typed_other->current1_ && | 
|  | current2_ == typed_other->current2_ && | 
|  | current3_ == typed_other->current3_ && | 
|  | current4_ == typed_other->current4_ && | 
|  | current5_ == typed_other->current5_ && | 
|  | current6_ == typed_other->current6_ && | 
|  | current7_ == typed_other->current7_ && | 
|  | current8_ == typed_other->current8_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | Iterator(const Iterator& other) | 
|  | : base_(other.base_), | 
|  | begin1_(other.begin1_), | 
|  | end1_(other.end1_), | 
|  | current1_(other.current1_), | 
|  | begin2_(other.begin2_), | 
|  | end2_(other.end2_), | 
|  | current2_(other.current2_), | 
|  | begin3_(other.begin3_), | 
|  | end3_(other.end3_), | 
|  | current3_(other.current3_), | 
|  | begin4_(other.begin4_), | 
|  | end4_(other.end4_), | 
|  | current4_(other.current4_), | 
|  | begin5_(other.begin5_), | 
|  | end5_(other.end5_), | 
|  | current5_(other.current5_), | 
|  | begin6_(other.begin6_), | 
|  | end6_(other.end6_), | 
|  | current6_(other.current6_), | 
|  | begin7_(other.begin7_), | 
|  | end7_(other.end7_), | 
|  | current7_(other.current7_), | 
|  | begin8_(other.begin8_), | 
|  | end8_(other.end8_), | 
|  | current8_(other.current8_) { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  |  | 
|  | void ComputeCurrentValue() { | 
|  | if (!AtEnd()) | 
|  | current_value_ = ParamType(*current1_, *current2_, *current3_, | 
|  | *current4_, *current5_, *current6_, *current7_, *current8_); | 
|  | } | 
|  | bool AtEnd() const { | 
|  | // We must report iterator past the end of the range when either of the | 
|  | // component iterators has reached the end of its range. | 
|  | return | 
|  | current1_ == end1_ || | 
|  | current2_ == end2_ || | 
|  | current3_ == end3_ || | 
|  | current4_ == end4_ || | 
|  | current5_ == end5_ || | 
|  | current6_ == end6_ || | 
|  | current7_ == end7_ || | 
|  | current8_ == end8_; | 
|  | } | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const Iterator& other); | 
|  |  | 
|  | const ParamGeneratorInterface<ParamType>* const base_; | 
|  | // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. | 
|  | // current[i]_ is the actual traversing iterator. | 
|  | const typename ParamGenerator<T1>::iterator begin1_; | 
|  | const typename ParamGenerator<T1>::iterator end1_; | 
|  | typename ParamGenerator<T1>::iterator current1_; | 
|  | const typename ParamGenerator<T2>::iterator begin2_; | 
|  | const typename ParamGenerator<T2>::iterator end2_; | 
|  | typename ParamGenerator<T2>::iterator current2_; | 
|  | const typename ParamGenerator<T3>::iterator begin3_; | 
|  | const typename ParamGenerator<T3>::iterator end3_; | 
|  | typename ParamGenerator<T3>::iterator current3_; | 
|  | const typename ParamGenerator<T4>::iterator begin4_; | 
|  | const typename ParamGenerator<T4>::iterator end4_; | 
|  | typename ParamGenerator<T4>::iterator current4_; | 
|  | const typename ParamGenerator<T5>::iterator begin5_; | 
|  | const typename ParamGenerator<T5>::iterator end5_; | 
|  | typename ParamGenerator<T5>::iterator current5_; | 
|  | const typename ParamGenerator<T6>::iterator begin6_; | 
|  | const typename ParamGenerator<T6>::iterator end6_; | 
|  | typename ParamGenerator<T6>::iterator current6_; | 
|  | const typename ParamGenerator<T7>::iterator begin7_; | 
|  | const typename ParamGenerator<T7>::iterator end7_; | 
|  | typename ParamGenerator<T7>::iterator current7_; | 
|  | const typename ParamGenerator<T8>::iterator begin8_; | 
|  | const typename ParamGenerator<T8>::iterator end8_; | 
|  | typename ParamGenerator<T8>::iterator current8_; | 
|  | ParamType current_value_; | 
|  | };  // class CartesianProductGenerator8::Iterator | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductGenerator8& other); | 
|  |  | 
|  | const ParamGenerator<T1> g1_; | 
|  | const ParamGenerator<T2> g2_; | 
|  | const ParamGenerator<T3> g3_; | 
|  | const ParamGenerator<T4> g4_; | 
|  | const ParamGenerator<T5> g5_; | 
|  | const ParamGenerator<T6> g6_; | 
|  | const ParamGenerator<T7> g7_; | 
|  | const ParamGenerator<T8> g8_; | 
|  | };  // class CartesianProductGenerator8 | 
|  |  | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9> | 
|  | class CartesianProductGenerator9 | 
|  | : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, | 
|  | T7, T8, T9> > { | 
|  | public: | 
|  | typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType; | 
|  |  | 
|  | CartesianProductGenerator9(const ParamGenerator<T1>& g1, | 
|  | const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, | 
|  | const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, | 
|  | const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, | 
|  | const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), | 
|  | g9_(g9) {} | 
|  | virtual ~CartesianProductGenerator9() {} | 
|  |  | 
|  | virtual ParamIteratorInterface<ParamType>* Begin() const { | 
|  | return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, | 
|  | g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, | 
|  | g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin()); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* End() const { | 
|  | return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), | 
|  | g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, | 
|  | g8_.end(), g9_, g9_.end()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | class Iterator : public ParamIteratorInterface<ParamType> { | 
|  | public: | 
|  | Iterator(const ParamGeneratorInterface<ParamType>* base, | 
|  | const ParamGenerator<T1>& g1, | 
|  | const typename ParamGenerator<T1>::iterator& current1, | 
|  | const ParamGenerator<T2>& g2, | 
|  | const typename ParamGenerator<T2>::iterator& current2, | 
|  | const ParamGenerator<T3>& g3, | 
|  | const typename ParamGenerator<T3>::iterator& current3, | 
|  | const ParamGenerator<T4>& g4, | 
|  | const typename ParamGenerator<T4>::iterator& current4, | 
|  | const ParamGenerator<T5>& g5, | 
|  | const typename ParamGenerator<T5>::iterator& current5, | 
|  | const ParamGenerator<T6>& g6, | 
|  | const typename ParamGenerator<T6>::iterator& current6, | 
|  | const ParamGenerator<T7>& g7, | 
|  | const typename ParamGenerator<T7>::iterator& current7, | 
|  | const ParamGenerator<T8>& g8, | 
|  | const typename ParamGenerator<T8>::iterator& current8, | 
|  | const ParamGenerator<T9>& g9, | 
|  | const typename ParamGenerator<T9>::iterator& current9) | 
|  | : base_(base), | 
|  | begin1_(g1.begin()), end1_(g1.end()), current1_(current1), | 
|  | begin2_(g2.begin()), end2_(g2.end()), current2_(current2), | 
|  | begin3_(g3.begin()), end3_(g3.end()), current3_(current3), | 
|  | begin4_(g4.begin()), end4_(g4.end()), current4_(current4), | 
|  | begin5_(g5.begin()), end5_(g5.end()), current5_(current5), | 
|  | begin6_(g6.begin()), end6_(g6.end()), current6_(current6), | 
|  | begin7_(g7.begin()), end7_(g7.end()), current7_(current7), | 
|  | begin8_(g8.begin()), end8_(g8.end()), current8_(current8), | 
|  | begin9_(g9.begin()), end9_(g9.end()), current9_(current9)    { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ~Iterator() {} | 
|  |  | 
|  | virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { | 
|  | return base_; | 
|  | } | 
|  | // Advance should not be called on beyond-of-range iterators | 
|  | // so no component iterators must be beyond end of range, either. | 
|  | virtual void Advance() { | 
|  | assert(!AtEnd()); | 
|  | ++current9_; | 
|  | if (current9_ == end9_) { | 
|  | current9_ = begin9_; | 
|  | ++current8_; | 
|  | } | 
|  | if (current8_ == end8_) { | 
|  | current8_ = begin8_; | 
|  | ++current7_; | 
|  | } | 
|  | if (current7_ == end7_) { | 
|  | current7_ = begin7_; | 
|  | ++current6_; | 
|  | } | 
|  | if (current6_ == end6_) { | 
|  | current6_ = begin6_; | 
|  | ++current5_; | 
|  | } | 
|  | if (current5_ == end5_) { | 
|  | current5_ = begin5_; | 
|  | ++current4_; | 
|  | } | 
|  | if (current4_ == end4_) { | 
|  | current4_ = begin4_; | 
|  | ++current3_; | 
|  | } | 
|  | if (current3_ == end3_) { | 
|  | current3_ = begin3_; | 
|  | ++current2_; | 
|  | } | 
|  | if (current2_ == end2_) { | 
|  | current2_ = begin2_; | 
|  | ++current1_; | 
|  | } | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* Clone() const { | 
|  | return new Iterator(*this); | 
|  | } | 
|  | virtual const ParamType* Current() const { return ¤t_value_; } | 
|  | virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { | 
|  | // Having the same base generator guarantees that the other | 
|  | // iterator is of the same type and we can downcast. | 
|  | GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) | 
|  | << "The program attempted to compare iterators " | 
|  | << "from different generators." << std::endl; | 
|  | const Iterator* typed_other = | 
|  | CheckedDowncastToActualType<const Iterator>(&other); | 
|  | // We must report iterators equal if they both point beyond their | 
|  | // respective ranges. That can happen in a variety of fashions, | 
|  | // so we have to consult AtEnd(). | 
|  | return (AtEnd() && typed_other->AtEnd()) || | 
|  | ( | 
|  | current1_ == typed_other->current1_ && | 
|  | current2_ == typed_other->current2_ && | 
|  | current3_ == typed_other->current3_ && | 
|  | current4_ == typed_other->current4_ && | 
|  | current5_ == typed_other->current5_ && | 
|  | current6_ == typed_other->current6_ && | 
|  | current7_ == typed_other->current7_ && | 
|  | current8_ == typed_other->current8_ && | 
|  | current9_ == typed_other->current9_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | Iterator(const Iterator& other) | 
|  | : base_(other.base_), | 
|  | begin1_(other.begin1_), | 
|  | end1_(other.end1_), | 
|  | current1_(other.current1_), | 
|  | begin2_(other.begin2_), | 
|  | end2_(other.end2_), | 
|  | current2_(other.current2_), | 
|  | begin3_(other.begin3_), | 
|  | end3_(other.end3_), | 
|  | current3_(other.current3_), | 
|  | begin4_(other.begin4_), | 
|  | end4_(other.end4_), | 
|  | current4_(other.current4_), | 
|  | begin5_(other.begin5_), | 
|  | end5_(other.end5_), | 
|  | current5_(other.current5_), | 
|  | begin6_(other.begin6_), | 
|  | end6_(other.end6_), | 
|  | current6_(other.current6_), | 
|  | begin7_(other.begin7_), | 
|  | end7_(other.end7_), | 
|  | current7_(other.current7_), | 
|  | begin8_(other.begin8_), | 
|  | end8_(other.end8_), | 
|  | current8_(other.current8_), | 
|  | begin9_(other.begin9_), | 
|  | end9_(other.end9_), | 
|  | current9_(other.current9_) { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  |  | 
|  | void ComputeCurrentValue() { | 
|  | if (!AtEnd()) | 
|  | current_value_ = ParamType(*current1_, *current2_, *current3_, | 
|  | *current4_, *current5_, *current6_, *current7_, *current8_, | 
|  | *current9_); | 
|  | } | 
|  | bool AtEnd() const { | 
|  | // We must report iterator past the end of the range when either of the | 
|  | // component iterators has reached the end of its range. | 
|  | return | 
|  | current1_ == end1_ || | 
|  | current2_ == end2_ || | 
|  | current3_ == end3_ || | 
|  | current4_ == end4_ || | 
|  | current5_ == end5_ || | 
|  | current6_ == end6_ || | 
|  | current7_ == end7_ || | 
|  | current8_ == end8_ || | 
|  | current9_ == end9_; | 
|  | } | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const Iterator& other); | 
|  |  | 
|  | const ParamGeneratorInterface<ParamType>* const base_; | 
|  | // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. | 
|  | // current[i]_ is the actual traversing iterator. | 
|  | const typename ParamGenerator<T1>::iterator begin1_; | 
|  | const typename ParamGenerator<T1>::iterator end1_; | 
|  | typename ParamGenerator<T1>::iterator current1_; | 
|  | const typename ParamGenerator<T2>::iterator begin2_; | 
|  | const typename ParamGenerator<T2>::iterator end2_; | 
|  | typename ParamGenerator<T2>::iterator current2_; | 
|  | const typename ParamGenerator<T3>::iterator begin3_; | 
|  | const typename ParamGenerator<T3>::iterator end3_; | 
|  | typename ParamGenerator<T3>::iterator current3_; | 
|  | const typename ParamGenerator<T4>::iterator begin4_; | 
|  | const typename ParamGenerator<T4>::iterator end4_; | 
|  | typename ParamGenerator<T4>::iterator current4_; | 
|  | const typename ParamGenerator<T5>::iterator begin5_; | 
|  | const typename ParamGenerator<T5>::iterator end5_; | 
|  | typename ParamGenerator<T5>::iterator current5_; | 
|  | const typename ParamGenerator<T6>::iterator begin6_; | 
|  | const typename ParamGenerator<T6>::iterator end6_; | 
|  | typename ParamGenerator<T6>::iterator current6_; | 
|  | const typename ParamGenerator<T7>::iterator begin7_; | 
|  | const typename ParamGenerator<T7>::iterator end7_; | 
|  | typename ParamGenerator<T7>::iterator current7_; | 
|  | const typename ParamGenerator<T8>::iterator begin8_; | 
|  | const typename ParamGenerator<T8>::iterator end8_; | 
|  | typename ParamGenerator<T8>::iterator current8_; | 
|  | const typename ParamGenerator<T9>::iterator begin9_; | 
|  | const typename ParamGenerator<T9>::iterator end9_; | 
|  | typename ParamGenerator<T9>::iterator current9_; | 
|  | ParamType current_value_; | 
|  | };  // class CartesianProductGenerator9::Iterator | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductGenerator9& other); | 
|  |  | 
|  | const ParamGenerator<T1> g1_; | 
|  | const ParamGenerator<T2> g2_; | 
|  | const ParamGenerator<T3> g3_; | 
|  | const ParamGenerator<T4> g4_; | 
|  | const ParamGenerator<T5> g5_; | 
|  | const ParamGenerator<T6> g6_; | 
|  | const ParamGenerator<T7> g7_; | 
|  | const ParamGenerator<T8> g8_; | 
|  | const ParamGenerator<T9> g9_; | 
|  | };  // class CartesianProductGenerator9 | 
|  |  | 
|  |  | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10> | 
|  | class CartesianProductGenerator10 | 
|  | : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6, | 
|  | T7, T8, T9, T10> > { | 
|  | public: | 
|  | typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType; | 
|  |  | 
|  | CartesianProductGenerator10(const ParamGenerator<T1>& g1, | 
|  | const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3, | 
|  | const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5, | 
|  | const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7, | 
|  | const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9, | 
|  | const ParamGenerator<T10>& g10) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), | 
|  | g9_(g9), g10_(g10) {} | 
|  | virtual ~CartesianProductGenerator10() {} | 
|  |  | 
|  | virtual ParamIteratorInterface<ParamType>* Begin() const { | 
|  | return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_, | 
|  | g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_, | 
|  | g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin()); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* End() const { | 
|  | return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(), | 
|  | g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_, | 
|  | g8_.end(), g9_, g9_.end(), g10_, g10_.end()); | 
|  | } | 
|  |  | 
|  | private: | 
|  | class Iterator : public ParamIteratorInterface<ParamType> { | 
|  | public: | 
|  | Iterator(const ParamGeneratorInterface<ParamType>* base, | 
|  | const ParamGenerator<T1>& g1, | 
|  | const typename ParamGenerator<T1>::iterator& current1, | 
|  | const ParamGenerator<T2>& g2, | 
|  | const typename ParamGenerator<T2>::iterator& current2, | 
|  | const ParamGenerator<T3>& g3, | 
|  | const typename ParamGenerator<T3>::iterator& current3, | 
|  | const ParamGenerator<T4>& g4, | 
|  | const typename ParamGenerator<T4>::iterator& current4, | 
|  | const ParamGenerator<T5>& g5, | 
|  | const typename ParamGenerator<T5>::iterator& current5, | 
|  | const ParamGenerator<T6>& g6, | 
|  | const typename ParamGenerator<T6>::iterator& current6, | 
|  | const ParamGenerator<T7>& g7, | 
|  | const typename ParamGenerator<T7>::iterator& current7, | 
|  | const ParamGenerator<T8>& g8, | 
|  | const typename ParamGenerator<T8>::iterator& current8, | 
|  | const ParamGenerator<T9>& g9, | 
|  | const typename ParamGenerator<T9>::iterator& current9, | 
|  | const ParamGenerator<T10>& g10, | 
|  | const typename ParamGenerator<T10>::iterator& current10) | 
|  | : base_(base), | 
|  | begin1_(g1.begin()), end1_(g1.end()), current1_(current1), | 
|  | begin2_(g2.begin()), end2_(g2.end()), current2_(current2), | 
|  | begin3_(g3.begin()), end3_(g3.end()), current3_(current3), | 
|  | begin4_(g4.begin()), end4_(g4.end()), current4_(current4), | 
|  | begin5_(g5.begin()), end5_(g5.end()), current5_(current5), | 
|  | begin6_(g6.begin()), end6_(g6.end()), current6_(current6), | 
|  | begin7_(g7.begin()), end7_(g7.end()), current7_(current7), | 
|  | begin8_(g8.begin()), end8_(g8.end()), current8_(current8), | 
|  | begin9_(g9.begin()), end9_(g9.end()), current9_(current9), | 
|  | begin10_(g10.begin()), end10_(g10.end()), current10_(current10)    { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ~Iterator() {} | 
|  |  | 
|  | virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const { | 
|  | return base_; | 
|  | } | 
|  | // Advance should not be called on beyond-of-range iterators | 
|  | // so no component iterators must be beyond end of range, either. | 
|  | virtual void Advance() { | 
|  | assert(!AtEnd()); | 
|  | ++current10_; | 
|  | if (current10_ == end10_) { | 
|  | current10_ = begin10_; | 
|  | ++current9_; | 
|  | } | 
|  | if (current9_ == end9_) { | 
|  | current9_ = begin9_; | 
|  | ++current8_; | 
|  | } | 
|  | if (current8_ == end8_) { | 
|  | current8_ = begin8_; | 
|  | ++current7_; | 
|  | } | 
|  | if (current7_ == end7_) { | 
|  | current7_ = begin7_; | 
|  | ++current6_; | 
|  | } | 
|  | if (current6_ == end6_) { | 
|  | current6_ = begin6_; | 
|  | ++current5_; | 
|  | } | 
|  | if (current5_ == end5_) { | 
|  | current5_ = begin5_; | 
|  | ++current4_; | 
|  | } | 
|  | if (current4_ == end4_) { | 
|  | current4_ = begin4_; | 
|  | ++current3_; | 
|  | } | 
|  | if (current3_ == end3_) { | 
|  | current3_ = begin3_; | 
|  | ++current2_; | 
|  | } | 
|  | if (current2_ == end2_) { | 
|  | current2_ = begin2_; | 
|  | ++current1_; | 
|  | } | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  | virtual ParamIteratorInterface<ParamType>* Clone() const { | 
|  | return new Iterator(*this); | 
|  | } | 
|  | virtual const ParamType* Current() const { return ¤t_value_; } | 
|  | virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const { | 
|  | // Having the same base generator guarantees that the other | 
|  | // iterator is of the same type and we can downcast. | 
|  | GTEST_CHECK_(BaseGenerator() == other.BaseGenerator()) | 
|  | << "The program attempted to compare iterators " | 
|  | << "from different generators." << std::endl; | 
|  | const Iterator* typed_other = | 
|  | CheckedDowncastToActualType<const Iterator>(&other); | 
|  | // We must report iterators equal if they both point beyond their | 
|  | // respective ranges. That can happen in a variety of fashions, | 
|  | // so we have to consult AtEnd(). | 
|  | return (AtEnd() && typed_other->AtEnd()) || | 
|  | ( | 
|  | current1_ == typed_other->current1_ && | 
|  | current2_ == typed_other->current2_ && | 
|  | current3_ == typed_other->current3_ && | 
|  | current4_ == typed_other->current4_ && | 
|  | current5_ == typed_other->current5_ && | 
|  | current6_ == typed_other->current6_ && | 
|  | current7_ == typed_other->current7_ && | 
|  | current8_ == typed_other->current8_ && | 
|  | current9_ == typed_other->current9_ && | 
|  | current10_ == typed_other->current10_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | Iterator(const Iterator& other) | 
|  | : base_(other.base_), | 
|  | begin1_(other.begin1_), | 
|  | end1_(other.end1_), | 
|  | current1_(other.current1_), | 
|  | begin2_(other.begin2_), | 
|  | end2_(other.end2_), | 
|  | current2_(other.current2_), | 
|  | begin3_(other.begin3_), | 
|  | end3_(other.end3_), | 
|  | current3_(other.current3_), | 
|  | begin4_(other.begin4_), | 
|  | end4_(other.end4_), | 
|  | current4_(other.current4_), | 
|  | begin5_(other.begin5_), | 
|  | end5_(other.end5_), | 
|  | current5_(other.current5_), | 
|  | begin6_(other.begin6_), | 
|  | end6_(other.end6_), | 
|  | current6_(other.current6_), | 
|  | begin7_(other.begin7_), | 
|  | end7_(other.end7_), | 
|  | current7_(other.current7_), | 
|  | begin8_(other.begin8_), | 
|  | end8_(other.end8_), | 
|  | current8_(other.current8_), | 
|  | begin9_(other.begin9_), | 
|  | end9_(other.end9_), | 
|  | current9_(other.current9_), | 
|  | begin10_(other.begin10_), | 
|  | end10_(other.end10_), | 
|  | current10_(other.current10_) { | 
|  | ComputeCurrentValue(); | 
|  | } | 
|  |  | 
|  | void ComputeCurrentValue() { | 
|  | if (!AtEnd()) | 
|  | current_value_ = ParamType(*current1_, *current2_, *current3_, | 
|  | *current4_, *current5_, *current6_, *current7_, *current8_, | 
|  | *current9_, *current10_); | 
|  | } | 
|  | bool AtEnd() const { | 
|  | // We must report iterator past the end of the range when either of the | 
|  | // component iterators has reached the end of its range. | 
|  | return | 
|  | current1_ == end1_ || | 
|  | current2_ == end2_ || | 
|  | current3_ == end3_ || | 
|  | current4_ == end4_ || | 
|  | current5_ == end5_ || | 
|  | current6_ == end6_ || | 
|  | current7_ == end7_ || | 
|  | current8_ == end8_ || | 
|  | current9_ == end9_ || | 
|  | current10_ == end10_; | 
|  | } | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const Iterator& other); | 
|  |  | 
|  | const ParamGeneratorInterface<ParamType>* const base_; | 
|  | // begin[i]_ and end[i]_ define the i-th range that Iterator traverses. | 
|  | // current[i]_ is the actual traversing iterator. | 
|  | const typename ParamGenerator<T1>::iterator begin1_; | 
|  | const typename ParamGenerator<T1>::iterator end1_; | 
|  | typename ParamGenerator<T1>::iterator current1_; | 
|  | const typename ParamGenerator<T2>::iterator begin2_; | 
|  | const typename ParamGenerator<T2>::iterator end2_; | 
|  | typename ParamGenerator<T2>::iterator current2_; | 
|  | const typename ParamGenerator<T3>::iterator begin3_; | 
|  | const typename ParamGenerator<T3>::iterator end3_; | 
|  | typename ParamGenerator<T3>::iterator current3_; | 
|  | const typename ParamGenerator<T4>::iterator begin4_; | 
|  | const typename ParamGenerator<T4>::iterator end4_; | 
|  | typename ParamGenerator<T4>::iterator current4_; | 
|  | const typename ParamGenerator<T5>::iterator begin5_; | 
|  | const typename ParamGenerator<T5>::iterator end5_; | 
|  | typename ParamGenerator<T5>::iterator current5_; | 
|  | const typename ParamGenerator<T6>::iterator begin6_; | 
|  | const typename ParamGenerator<T6>::iterator end6_; | 
|  | typename ParamGenerator<T6>::iterator current6_; | 
|  | const typename ParamGenerator<T7>::iterator begin7_; | 
|  | const typename ParamGenerator<T7>::iterator end7_; | 
|  | typename ParamGenerator<T7>::iterator current7_; | 
|  | const typename ParamGenerator<T8>::iterator begin8_; | 
|  | const typename ParamGenerator<T8>::iterator end8_; | 
|  | typename ParamGenerator<T8>::iterator current8_; | 
|  | const typename ParamGenerator<T9>::iterator begin9_; | 
|  | const typename ParamGenerator<T9>::iterator end9_; | 
|  | typename ParamGenerator<T9>::iterator current9_; | 
|  | const typename ParamGenerator<T10>::iterator begin10_; | 
|  | const typename ParamGenerator<T10>::iterator end10_; | 
|  | typename ParamGenerator<T10>::iterator current10_; | 
|  | ParamType current_value_; | 
|  | };  // class CartesianProductGenerator10::Iterator | 
|  |  | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductGenerator10& other); | 
|  |  | 
|  | const ParamGenerator<T1> g1_; | 
|  | const ParamGenerator<T2> g2_; | 
|  | const ParamGenerator<T3> g3_; | 
|  | const ParamGenerator<T4> g4_; | 
|  | const ParamGenerator<T5> g5_; | 
|  | const ParamGenerator<T6> g6_; | 
|  | const ParamGenerator<T7> g7_; | 
|  | const ParamGenerator<T8> g8_; | 
|  | const ParamGenerator<T9> g9_; | 
|  | const ParamGenerator<T10> g10_; | 
|  | };  // class CartesianProductGenerator10 | 
|  |  | 
|  |  | 
|  | // INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE. | 
|  | // | 
|  | // Helper classes providing Combine() with polymorphic features. They allow | 
|  | // casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is | 
|  | // convertible to U. | 
|  | // | 
|  | template <class Generator1, class Generator2> | 
|  | class CartesianProductHolder2 { | 
|  | public: | 
|  | CartesianProductHolder2(const Generator1& g1, const Generator2& g2) | 
|  | : g1_(g1), g2_(g2) {} | 
|  | template <typename T1, typename T2> | 
|  | operator ParamGenerator< ::testing::tuple<T1, T2> >() const { | 
|  | return ParamGenerator< ::testing::tuple<T1, T2> >( | 
|  | new CartesianProductGenerator2<T1, T2>( | 
|  | static_cast<ParamGenerator<T1> >(g1_), | 
|  | static_cast<ParamGenerator<T2> >(g2_))); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductHolder2& other); | 
|  |  | 
|  | const Generator1 g1_; | 
|  | const Generator2 g2_; | 
|  | };  // class CartesianProductHolder2 | 
|  |  | 
|  | template <class Generator1, class Generator2, class Generator3> | 
|  | class CartesianProductHolder3 { | 
|  | public: | 
|  | CartesianProductHolder3(const Generator1& g1, const Generator2& g2, | 
|  | const Generator3& g3) | 
|  | : g1_(g1), g2_(g2), g3_(g3) {} | 
|  | template <typename T1, typename T2, typename T3> | 
|  | operator ParamGenerator< ::testing::tuple<T1, T2, T3> >() const { | 
|  | return ParamGenerator< ::testing::tuple<T1, T2, T3> >( | 
|  | new CartesianProductGenerator3<T1, T2, T3>( | 
|  | static_cast<ParamGenerator<T1> >(g1_), | 
|  | static_cast<ParamGenerator<T2> >(g2_), | 
|  | static_cast<ParamGenerator<T3> >(g3_))); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductHolder3& other); | 
|  |  | 
|  | const Generator1 g1_; | 
|  | const Generator2 g2_; | 
|  | const Generator3 g3_; | 
|  | };  // class CartesianProductHolder3 | 
|  |  | 
|  | template <class Generator1, class Generator2, class Generator3, | 
|  | class Generator4> | 
|  | class CartesianProductHolder4 { | 
|  | public: | 
|  | CartesianProductHolder4(const Generator1& g1, const Generator2& g2, | 
|  | const Generator3& g3, const Generator4& g4) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {} | 
|  | template <typename T1, typename T2, typename T3, typename T4> | 
|  | operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >() const { | 
|  | return ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >( | 
|  | new CartesianProductGenerator4<T1, T2, T3, T4>( | 
|  | static_cast<ParamGenerator<T1> >(g1_), | 
|  | static_cast<ParamGenerator<T2> >(g2_), | 
|  | static_cast<ParamGenerator<T3> >(g3_), | 
|  | static_cast<ParamGenerator<T4> >(g4_))); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductHolder4& other); | 
|  |  | 
|  | const Generator1 g1_; | 
|  | const Generator2 g2_; | 
|  | const Generator3 g3_; | 
|  | const Generator4 g4_; | 
|  | };  // class CartesianProductHolder4 | 
|  |  | 
|  | template <class Generator1, class Generator2, class Generator3, | 
|  | class Generator4, class Generator5> | 
|  | class CartesianProductHolder5 { | 
|  | public: | 
|  | CartesianProductHolder5(const Generator1& g1, const Generator2& g2, | 
|  | const Generator3& g3, const Generator4& g4, const Generator5& g5) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {} | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5> | 
|  | operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >() const { | 
|  | return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >( | 
|  | new CartesianProductGenerator5<T1, T2, T3, T4, T5>( | 
|  | static_cast<ParamGenerator<T1> >(g1_), | 
|  | static_cast<ParamGenerator<T2> >(g2_), | 
|  | static_cast<ParamGenerator<T3> >(g3_), | 
|  | static_cast<ParamGenerator<T4> >(g4_), | 
|  | static_cast<ParamGenerator<T5> >(g5_))); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductHolder5& other); | 
|  |  | 
|  | const Generator1 g1_; | 
|  | const Generator2 g2_; | 
|  | const Generator3 g3_; | 
|  | const Generator4 g4_; | 
|  | const Generator5 g5_; | 
|  | };  // class CartesianProductHolder5 | 
|  |  | 
|  | template <class Generator1, class Generator2, class Generator3, | 
|  | class Generator4, class Generator5, class Generator6> | 
|  | class CartesianProductHolder6 { | 
|  | public: | 
|  | CartesianProductHolder6(const Generator1& g1, const Generator2& g2, | 
|  | const Generator3& g3, const Generator4& g4, const Generator5& g5, | 
|  | const Generator6& g6) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {} | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6> | 
|  | operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >() const { | 
|  | return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >( | 
|  | new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>( | 
|  | static_cast<ParamGenerator<T1> >(g1_), | 
|  | static_cast<ParamGenerator<T2> >(g2_), | 
|  | static_cast<ParamGenerator<T3> >(g3_), | 
|  | static_cast<ParamGenerator<T4> >(g4_), | 
|  | static_cast<ParamGenerator<T5> >(g5_), | 
|  | static_cast<ParamGenerator<T6> >(g6_))); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductHolder6& other); | 
|  |  | 
|  | const Generator1 g1_; | 
|  | const Generator2 g2_; | 
|  | const Generator3 g3_; | 
|  | const Generator4 g4_; | 
|  | const Generator5 g5_; | 
|  | const Generator6 g6_; | 
|  | };  // class CartesianProductHolder6 | 
|  |  | 
|  | template <class Generator1, class Generator2, class Generator3, | 
|  | class Generator4, class Generator5, class Generator6, class Generator7> | 
|  | class CartesianProductHolder7 { | 
|  | public: | 
|  | CartesianProductHolder7(const Generator1& g1, const Generator2& g2, | 
|  | const Generator3& g3, const Generator4& g4, const Generator5& g5, | 
|  | const Generator6& g6, const Generator7& g7) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {} | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7> | 
|  | operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, | 
|  | T7> >() const { | 
|  | return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> >( | 
|  | new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>( | 
|  | static_cast<ParamGenerator<T1> >(g1_), | 
|  | static_cast<ParamGenerator<T2> >(g2_), | 
|  | static_cast<ParamGenerator<T3> >(g3_), | 
|  | static_cast<ParamGenerator<T4> >(g4_), | 
|  | static_cast<ParamGenerator<T5> >(g5_), | 
|  | static_cast<ParamGenerator<T6> >(g6_), | 
|  | static_cast<ParamGenerator<T7> >(g7_))); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductHolder7& other); | 
|  |  | 
|  | const Generator1 g1_; | 
|  | const Generator2 g2_; | 
|  | const Generator3 g3_; | 
|  | const Generator4 g4_; | 
|  | const Generator5 g5_; | 
|  | const Generator6 g6_; | 
|  | const Generator7 g7_; | 
|  | };  // class CartesianProductHolder7 | 
|  |  | 
|  | template <class Generator1, class Generator2, class Generator3, | 
|  | class Generator4, class Generator5, class Generator6, class Generator7, | 
|  | class Generator8> | 
|  | class CartesianProductHolder8 { | 
|  | public: | 
|  | CartesianProductHolder8(const Generator1& g1, const Generator2& g2, | 
|  | const Generator3& g3, const Generator4& g4, const Generator5& g5, | 
|  | const Generator6& g6, const Generator7& g7, const Generator8& g8) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), | 
|  | g8_(g8) {} | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8> | 
|  | operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, | 
|  | T8> >() const { | 
|  | return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >( | 
|  | new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>( | 
|  | static_cast<ParamGenerator<T1> >(g1_), | 
|  | static_cast<ParamGenerator<T2> >(g2_), | 
|  | static_cast<ParamGenerator<T3> >(g3_), | 
|  | static_cast<ParamGenerator<T4> >(g4_), | 
|  | static_cast<ParamGenerator<T5> >(g5_), | 
|  | static_cast<ParamGenerator<T6> >(g6_), | 
|  | static_cast<ParamGenerator<T7> >(g7_), | 
|  | static_cast<ParamGenerator<T8> >(g8_))); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductHolder8& other); | 
|  |  | 
|  | const Generator1 g1_; | 
|  | const Generator2 g2_; | 
|  | const Generator3 g3_; | 
|  | const Generator4 g4_; | 
|  | const Generator5 g5_; | 
|  | const Generator6 g6_; | 
|  | const Generator7 g7_; | 
|  | const Generator8 g8_; | 
|  | };  // class CartesianProductHolder8 | 
|  |  | 
|  | template <class Generator1, class Generator2, class Generator3, | 
|  | class Generator4, class Generator5, class Generator6, class Generator7, | 
|  | class Generator8, class Generator9> | 
|  | class CartesianProductHolder9 { | 
|  | public: | 
|  | CartesianProductHolder9(const Generator1& g1, const Generator2& g2, | 
|  | const Generator3& g3, const Generator4& g4, const Generator5& g5, | 
|  | const Generator6& g6, const Generator7& g7, const Generator8& g8, | 
|  | const Generator9& g9) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), | 
|  | g9_(g9) {} | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9> | 
|  | operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, | 
|  | T9> >() const { | 
|  | return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, | 
|  | T9> >( | 
|  | new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>( | 
|  | static_cast<ParamGenerator<T1> >(g1_), | 
|  | static_cast<ParamGenerator<T2> >(g2_), | 
|  | static_cast<ParamGenerator<T3> >(g3_), | 
|  | static_cast<ParamGenerator<T4> >(g4_), | 
|  | static_cast<ParamGenerator<T5> >(g5_), | 
|  | static_cast<ParamGenerator<T6> >(g6_), | 
|  | static_cast<ParamGenerator<T7> >(g7_), | 
|  | static_cast<ParamGenerator<T8> >(g8_), | 
|  | static_cast<ParamGenerator<T9> >(g9_))); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductHolder9& other); | 
|  |  | 
|  | const Generator1 g1_; | 
|  | const Generator2 g2_; | 
|  | const Generator3 g3_; | 
|  | const Generator4 g4_; | 
|  | const Generator5 g5_; | 
|  | const Generator6 g6_; | 
|  | const Generator7 g7_; | 
|  | const Generator8 g8_; | 
|  | const Generator9 g9_; | 
|  | };  // class CartesianProductHolder9 | 
|  |  | 
|  | template <class Generator1, class Generator2, class Generator3, | 
|  | class Generator4, class Generator5, class Generator6, class Generator7, | 
|  | class Generator8, class Generator9, class Generator10> | 
|  | class CartesianProductHolder10 { | 
|  | public: | 
|  | CartesianProductHolder10(const Generator1& g1, const Generator2& g2, | 
|  | const Generator3& g3, const Generator4& g4, const Generator5& g5, | 
|  | const Generator6& g6, const Generator7& g7, const Generator8& g8, | 
|  | const Generator9& g9, const Generator10& g10) | 
|  | : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8), | 
|  | g9_(g9), g10_(g10) {} | 
|  | template <typename T1, typename T2, typename T3, typename T4, typename T5, | 
|  | typename T6, typename T7, typename T8, typename T9, typename T10> | 
|  | operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, | 
|  | T10> >() const { | 
|  | return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, | 
|  | T10> >( | 
|  | new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9, | 
|  | T10>( | 
|  | static_cast<ParamGenerator<T1> >(g1_), | 
|  | static_cast<ParamGenerator<T2> >(g2_), | 
|  | static_cast<ParamGenerator<T3> >(g3_), | 
|  | static_cast<ParamGenerator<T4> >(g4_), | 
|  | static_cast<ParamGenerator<T5> >(g5_), | 
|  | static_cast<ParamGenerator<T6> >(g6_), | 
|  | static_cast<ParamGenerator<T7> >(g7_), | 
|  | static_cast<ParamGenerator<T8> >(g8_), | 
|  | static_cast<ParamGenerator<T9> >(g9_), | 
|  | static_cast<ParamGenerator<T10> >(g10_))); | 
|  | } | 
|  |  | 
|  | private: | 
|  | // No implementation - assignment is unsupported. | 
|  | void operator=(const CartesianProductHolder10& other); | 
|  |  | 
|  | const Generator1 g1_; | 
|  | const Generator2 g2_; | 
|  | const Generator3 g3_; | 
|  | const Generator4 g4_; | 
|  | const Generator5 g5_; | 
|  | const Generator6 g6_; | 
|  | const Generator7 g7_; | 
|  | const Generator8 g8_; | 
|  | const Generator9 g9_; | 
|  | const Generator10 g10_; | 
|  | };  // class CartesianProductHolder10 | 
|  |  | 
|  | # endif  // GTEST_HAS_COMBINE | 
|  |  | 
|  | }  // namespace internal | 
|  | }  // namespace testing | 
|  |  | 
|  | #endif  //  GTEST_HAS_PARAM_TEST | 
|  |  | 
|  | #endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_ |