171874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// This file was GENERATED by command: 271874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// pump.py gtest-param-test.h.pump 371874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// DO NOT EDIT BY HAND!!! 4f904a612d9444ab36c07a8e619c113432e046f49vladlosev 5f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Copyright 2008, Google Inc. 6f904a612d9444ab36c07a8e619c113432e046f49vladlosev// All rights reserved. 7f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 8f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Redistribution and use in source and binary forms, with or without 9f904a612d9444ab36c07a8e619c113432e046f49vladlosev// modification, are permitted provided that the following conditions are 10f904a612d9444ab36c07a8e619c113432e046f49vladlosev// met: 11f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 12f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * Redistributions of source code must retain the above copyright 13f904a612d9444ab36c07a8e619c113432e046f49vladlosev// notice, this list of conditions and the following disclaimer. 14f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * Redistributions in binary form must reproduce the above 15f904a612d9444ab36c07a8e619c113432e046f49vladlosev// copyright notice, this list of conditions and the following disclaimer 16f904a612d9444ab36c07a8e619c113432e046f49vladlosev// in the documentation and/or other materials provided with the 17f904a612d9444ab36c07a8e619c113432e046f49vladlosev// distribution. 18f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * Neither the name of Google Inc. nor the names of its 19f904a612d9444ab36c07a8e619c113432e046f49vladlosev// contributors may be used to endorse or promote products derived from 20f904a612d9444ab36c07a8e619c113432e046f49vladlosev// this software without specific prior written permission. 21f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 22f904a612d9444ab36c07a8e619c113432e046f49vladlosev// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23f904a612d9444ab36c07a8e619c113432e046f49vladlosev// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24f904a612d9444ab36c07a8e619c113432e046f49vladlosev// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 25f904a612d9444ab36c07a8e619c113432e046f49vladlosev// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 26f904a612d9444ab36c07a8e619c113432e046f49vladlosev// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 27f904a612d9444ab36c07a8e619c113432e046f49vladlosev// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 28f904a612d9444ab36c07a8e619c113432e046f49vladlosev// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29f904a612d9444ab36c07a8e619c113432e046f49vladlosev// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30f904a612d9444ab36c07a8e619c113432e046f49vladlosev// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31f904a612d9444ab36c07a8e619c113432e046f49vladlosev// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 32f904a612d9444ab36c07a8e619c113432e046f49vladlosev// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 34f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Authors: vladl@google.com (Vlad Losev) 35f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 36f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Macros and functions for implementing parameterized tests 37f904a612d9444ab36c07a8e619c113432e046f49vladlosev// in Google C++ Testing Framework (Google Test) 38f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 39f904a612d9444ab36c07a8e619c113432e046f49vladlosev// This file is generated by a SCRIPT. DO NOT EDIT BY HAND! 40f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 41f904a612d9444ab36c07a8e619c113432e046f49vladlosev#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 42f904a612d9444ab36c07a8e619c113432e046f49vladlosev#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 43f904a612d9444ab36c07a8e619c113432e046f49vladlosev 44f904a612d9444ab36c07a8e619c113432e046f49vladlosev 45f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Value-parameterized tests allow you to test your code with different 46f904a612d9444ab36c07a8e619c113432e046f49vladlosev// parameters without writing multiple copies of the same test. 47f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 48f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Here is how you use value-parameterized tests: 49f904a612d9444ab36c07a8e619c113432e046f49vladlosev 50f904a612d9444ab36c07a8e619c113432e046f49vladlosev#if 0 51f904a612d9444ab36c07a8e619c113432e046f49vladlosev 52f904a612d9444ab36c07a8e619c113432e046f49vladlosev// To write value-parameterized tests, first you should define a fixture 5371874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// class. It is usually derived from testing::TestWithParam<T> (see below for 5471874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// another inheritance scheme that's sometimes useful in more complicated 5571874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// class hierarchies), where the type of your parameter values. 5671874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// TestWithParam<T> is itself derived from testing::Test. T can be any 5771874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// copyable type. If it's a raw pointer, you are responsible for managing the 5871874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// lifespan of the pointed values. 59f904a612d9444ab36c07a8e619c113432e046f49vladlosev 60f904a612d9444ab36c07a8e619c113432e046f49vladlosevclass FooTest : public ::testing::TestWithParam<const char*> { 61f904a612d9444ab36c07a8e619c113432e046f49vladlosev // You can implement all the usual class fixture members here. 62f904a612d9444ab36c07a8e619c113432e046f49vladlosev}; 63f904a612d9444ab36c07a8e619c113432e046f49vladlosev 64f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Then, use the TEST_P macro to define as many parameterized tests 65f904a612d9444ab36c07a8e619c113432e046f49vladlosev// for this fixture as you want. The _P suffix is for "parameterized" 66f904a612d9444ab36c07a8e619c113432e046f49vladlosev// or "pattern", whichever you prefer to think. 67f904a612d9444ab36c07a8e619c113432e046f49vladlosev 68f904a612d9444ab36c07a8e619c113432e046f49vladlosevTEST_P(FooTest, DoesBlah) { 69f904a612d9444ab36c07a8e619c113432e046f49vladlosev // Inside a test, access the test parameter with the GetParam() method 70f904a612d9444ab36c07a8e619c113432e046f49vladlosev // of the TestWithParam<T> class: 71f904a612d9444ab36c07a8e619c113432e046f49vladlosev EXPECT_TRUE(foo.Blah(GetParam())); 72f904a612d9444ab36c07a8e619c113432e046f49vladlosev ... 73f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 74f904a612d9444ab36c07a8e619c113432e046f49vladlosev 75f904a612d9444ab36c07a8e619c113432e046f49vladlosevTEST_P(FooTest, HasBlahBlah) { 76f904a612d9444ab36c07a8e619c113432e046f49vladlosev ... 77f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 78f904a612d9444ab36c07a8e619c113432e046f49vladlosev 79f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test 80f904a612d9444ab36c07a8e619c113432e046f49vladlosev// case with any set of parameters you want. Google Test defines a number 81f904a612d9444ab36c07a8e619c113432e046f49vladlosev// of functions for generating test parameters. They return what we call 82f904a612d9444ab36c07a8e619c113432e046f49vladlosev// (surprise!) parameter generators. Here is a summary of them, which 83f904a612d9444ab36c07a8e619c113432e046f49vladlosev// are all in the testing namespace: 84f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 85f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 86f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Range(begin, end [, step]) - Yields values {begin, begin+step, 87f904a612d9444ab36c07a8e619c113432e046f49vladlosev// begin+step+step, ...}. The values do not 88f904a612d9444ab36c07a8e619c113432e046f49vladlosev// include end. step defaults to 1. 89f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Values(v1, v2, ..., vN) - Yields values {v1, v2, ..., vN}. 90f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ValuesIn(container) - Yields values from a C-style array, an STL 91f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ValuesIn(begin,end) container, or an iterator range [begin, end). 92f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Bool() - Yields sequence {false, true}. 93f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Combine(g1, g2, ..., gN) - Yields all combinations (the Cartesian product 94f904a612d9444ab36c07a8e619c113432e046f49vladlosev// for the math savvy) of the values generated 95f904a612d9444ab36c07a8e619c113432e046f49vladlosev// by the N generators. 96f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 97f904a612d9444ab36c07a8e619c113432e046f49vladlosev// For more details, see comments at the definitions of these functions below 98f904a612d9444ab36c07a8e619c113432e046f49vladlosev// in this file. 99f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 100f904a612d9444ab36c07a8e619c113432e046f49vladlosev// The following statement will instantiate tests from the FooTest test case 101f904a612d9444ab36c07a8e619c113432e046f49vladlosev// each with parameter values "meeny", "miny", and "moe". 102f904a612d9444ab36c07a8e619c113432e046f49vladlosev 103f904a612d9444ab36c07a8e619c113432e046f49vladlosevINSTANTIATE_TEST_CASE_P(InstantiationName, 104f904a612d9444ab36c07a8e619c113432e046f49vladlosev FooTest, 105f904a612d9444ab36c07a8e619c113432e046f49vladlosev Values("meeny", "miny", "moe")); 106f904a612d9444ab36c07a8e619c113432e046f49vladlosev 107f904a612d9444ab36c07a8e619c113432e046f49vladlosev// To distinguish different instances of the pattern, (yes, you 108f904a612d9444ab36c07a8e619c113432e046f49vladlosev// can instantiate it more then once) the first argument to the 109f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the 110f904a612d9444ab36c07a8e619c113432e046f49vladlosev// actual test case name. Remember to pick unique prefixes for different 111f904a612d9444ab36c07a8e619c113432e046f49vladlosev// instantiations. The tests from the instantiation above will have 112f904a612d9444ab36c07a8e619c113432e046f49vladlosev// these names: 113f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 114f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * InstantiationName/FooTest.DoesBlah/0 for "meeny" 115f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * InstantiationName/FooTest.DoesBlah/1 for "miny" 116f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * InstantiationName/FooTest.DoesBlah/2 for "moe" 117f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * InstantiationName/FooTest.HasBlahBlah/0 for "meeny" 118f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * InstantiationName/FooTest.HasBlahBlah/1 for "miny" 119f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * InstantiationName/FooTest.HasBlahBlah/2 for "moe" 120f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 121f904a612d9444ab36c07a8e619c113432e046f49vladlosev// You can use these names in --gtest_filter. 122f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 123f904a612d9444ab36c07a8e619c113432e046f49vladlosev// This statement will instantiate all tests from FooTest again, each 124f904a612d9444ab36c07a8e619c113432e046f49vladlosev// with parameter values "cat" and "dog": 125f904a612d9444ab36c07a8e619c113432e046f49vladlosev 126f904a612d9444ab36c07a8e619c113432e046f49vladlosevconst char* pets[] = {"cat", "dog"}; 127f904a612d9444ab36c07a8e619c113432e046f49vladlosevINSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets)); 128f904a612d9444ab36c07a8e619c113432e046f49vladlosev 129f904a612d9444ab36c07a8e619c113432e046f49vladlosev// The tests from the instantiation above will have these names: 130f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 131f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat" 132f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog" 133f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat" 134f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog" 135f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 136f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests 137f904a612d9444ab36c07a8e619c113432e046f49vladlosev// in the given test case, whether their definitions come before or 138f904a612d9444ab36c07a8e619c113432e046f49vladlosev// AFTER the INSTANTIATE_TEST_CASE_P statement. 139f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 140d13d1ed2189fa4284c9d8d202bb88916309682f1vladlosev// Please also note that generator expressions (including parameters to the 141d13d1ed2189fa4284c9d8d202bb88916309682f1vladlosev// generators) are evaluated in InitGoogleTest(), after main() has started. 142d13d1ed2189fa4284c9d8d202bb88916309682f1vladlosev// This allows the user on one hand, to adjust generator parameters in order 143d13d1ed2189fa4284c9d8d202bb88916309682f1vladlosev// to dynamically determine a set of tests to run and on the other hand, 144d13d1ed2189fa4284c9d8d202bb88916309682f1vladlosev// give the user a chance to inspect the generated tests with Google Test 145d13d1ed2189fa4284c9d8d202bb88916309682f1vladlosev// reflection API before RUN_ALL_TESTS() is executed. 146f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 147f904a612d9444ab36c07a8e619c113432e046f49vladlosev// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc 148f904a612d9444ab36c07a8e619c113432e046f49vladlosev// for more examples. 149f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 150f904a612d9444ab36c07a8e619c113432e046f49vladlosev// In the future, we plan to publish the API for defining new parameter 151f904a612d9444ab36c07a8e619c113432e046f49vladlosev// generators. But for now this interface remains part of the internal 152f904a612d9444ab36c07a8e619c113432e046f49vladlosev// implementation and is subject to change. 15371874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// 15471874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// 15571874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// A parameterized test fixture must be derived from testing::Test and from 15671874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// testing::WithParamInterface<T>, where T is the type of the parameter 15771874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// values. Inheriting from TestWithParam<T> satisfies that requirement because 15871874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// TestWithParam<T> inherits from both Test and WithParamInterface. In more 15971874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// complicated hierarchies, however, it is occasionally useful to inherit 16071874246c3a054977d94fd4729576484c2af62e9zhanyong.wan// separately from Test and WithParamInterface. For example: 16171874246c3a054977d94fd4729576484c2af62e9zhanyong.wan 16271874246c3a054977d94fd4729576484c2af62e9zhanyong.wanclass BaseTest : public ::testing::Test { 16371874246c3a054977d94fd4729576484c2af62e9zhanyong.wan // You can inherit all the usual members for a non-parameterized test 16471874246c3a054977d94fd4729576484c2af62e9zhanyong.wan // fixture here. 16571874246c3a054977d94fd4729576484c2af62e9zhanyong.wan}; 16671874246c3a054977d94fd4729576484c2af62e9zhanyong.wan 16771874246c3a054977d94fd4729576484c2af62e9zhanyong.wanclass DerivedTest : public BaseTest, public ::testing::WithParamInterface<int> { 16871874246c3a054977d94fd4729576484c2af62e9zhanyong.wan // The usual test fixture members go here too. 16971874246c3a054977d94fd4729576484c2af62e9zhanyong.wan}; 17071874246c3a054977d94fd4729576484c2af62e9zhanyong.wan 17171874246c3a054977d94fd4729576484c2af62e9zhanyong.wanTEST_F(BaseTest, HasFoo) { 17271874246c3a054977d94fd4729576484c2af62e9zhanyong.wan // This is an ordinary non-parameterized test. 17371874246c3a054977d94fd4729576484c2af62e9zhanyong.wan} 17471874246c3a054977d94fd4729576484c2af62e9zhanyong.wan 17571874246c3a054977d94fd4729576484c2af62e9zhanyong.wanTEST_P(DerivedTest, DoesBlah) { 17671874246c3a054977d94fd4729576484c2af62e9zhanyong.wan // GetParam works just the same here as if you inherit from TestWithParam. 17771874246c3a054977d94fd4729576484c2af62e9zhanyong.wan EXPECT_TRUE(foo.Blah(GetParam())); 17871874246c3a054977d94fd4729576484c2af62e9zhanyong.wan} 179f904a612d9444ab36c07a8e619c113432e046f49vladlosev 180f904a612d9444ab36c07a8e619c113432e046f49vladlosev#endif // 0 181f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1822620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/internal/gtest-port.h" 183f904a612d9444ab36c07a8e619c113432e046f49vladlosev 184c427f5e8ab231012d7663a0ee408f1225bac971azhanyong.wan#if !GTEST_OS_SYMBIAN 185733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# include <utility> 186c427f5e8ab231012d7663a0ee408f1225bac971azhanyong.wan#endif 187f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1884b88dddfe24f51a6cecedfde7cbb128029646e4fzhanyong.wan// scripts/fuse_gtest.py depends on gtest's own header being #included 1894b88dddfe24f51a6cecedfde7cbb128029646e4fzhanyong.wan// *unconditionally*. Therefore these #includes cannot be moved 1904b88dddfe24f51a6cecedfde7cbb128029646e4fzhanyong.wan// inside #if GTEST_HAS_PARAM_TEST. 1912620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/internal/gtest-internal.h" 1922620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/internal/gtest-param-util.h" 1932620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/internal/gtest-param-util-generated.h" 194f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1954b88dddfe24f51a6cecedfde7cbb128029646e4fzhanyong.wan#if GTEST_HAS_PARAM_TEST 1964b88dddfe24f51a6cecedfde7cbb128029646e4fzhanyong.wan 197f904a612d9444ab36c07a8e619c113432e046f49vladlosevnamespace testing { 198f904a612d9444ab36c07a8e619c113432e046f49vladlosev 199f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Functions producing parameter generators. 200f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 201f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Google Test uses these generators to produce parameters for value- 202f904a612d9444ab36c07a8e619c113432e046f49vladlosev// parameterized tests. When a parameterized test case is instantiated 203f904a612d9444ab36c07a8e619c113432e046f49vladlosev// with a particular generator, Google Test creates and runs tests 204f904a612d9444ab36c07a8e619c113432e046f49vladlosev// for each element in the sequence produced by the generator. 205f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 206f904a612d9444ab36c07a8e619c113432e046f49vladlosev// In the following sample, tests from test case FooTest are instantiated 207f904a612d9444ab36c07a8e619c113432e046f49vladlosev// each three times with parameter values 3, 5, and 8: 208f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 209f904a612d9444ab36c07a8e619c113432e046f49vladlosev// class FooTest : public TestWithParam<int> { ... }; 210f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 211f904a612d9444ab36c07a8e619c113432e046f49vladlosev// TEST_P(FooTest, TestThis) { 212f904a612d9444ab36c07a8e619c113432e046f49vladlosev// } 213f904a612d9444ab36c07a8e619c113432e046f49vladlosev// TEST_P(FooTest, TestThat) { 214f904a612d9444ab36c07a8e619c113432e046f49vladlosev// } 215f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8)); 216f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 217f904a612d9444ab36c07a8e619c113432e046f49vladlosev 218f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Range() returns generators providing sequences of values in a range. 219f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 220f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Synopsis: 221f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Range(start, end) 222f904a612d9444ab36c07a8e619c113432e046f49vladlosev// - returns a generator producing a sequence of values {start, start+1, 223f904a612d9444ab36c07a8e619c113432e046f49vladlosev// start+2, ..., }. 224f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Range(start, end, step) 225f904a612d9444ab36c07a8e619c113432e046f49vladlosev// - returns a generator producing a sequence of values {start, start+step, 226f904a612d9444ab36c07a8e619c113432e046f49vladlosev// start+step+step, ..., }. 227f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Notes: 228f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * The generated sequences never include end. For example, Range(1, 5) 229f904a612d9444ab36c07a8e619c113432e046f49vladlosev// returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2) 230f904a612d9444ab36c07a8e619c113432e046f49vladlosev// returns a generator producing {1, 3, 5, 7}. 231f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * start and end must have the same type. That type may be any integral or 232f904a612d9444ab36c07a8e619c113432e046f49vladlosev// floating-point type or a user defined type satisfying these conditions: 233f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * It must be assignable (have operator=() defined). 234f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * It must have operator+() (operator+(int-compatible type) for 235f904a612d9444ab36c07a8e619c113432e046f49vladlosev// two-operand version). 236f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * It must have operator<() defined. 237f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Elements in the resulting sequences will also have that type. 238f904a612d9444ab36c07a8e619c113432e046f49vladlosev// * Condition start < end must be satisfied in order for resulting sequences 239f904a612d9444ab36c07a8e619c113432e046f49vladlosev// to contain any elements. 240f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 241f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T, typename IncrementT> 242f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ParamGenerator<T> Range(T start, T end, IncrementT step) { 243f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ParamGenerator<T>( 244f904a612d9444ab36c07a8e619c113432e046f49vladlosev new internal::RangeGenerator<T, IncrementT>(start, end, step)); 245f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 246f904a612d9444ab36c07a8e619c113432e046f49vladlosev 247f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T> 248f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ParamGenerator<T> Range(T start, T end) { 249f904a612d9444ab36c07a8e619c113432e046f49vladlosev return Range(start, end, 1); 250f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 251f904a612d9444ab36c07a8e619c113432e046f49vladlosev 252f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ValuesIn() function allows generation of tests with parameters coming from 253f904a612d9444ab36c07a8e619c113432e046f49vladlosev// a container. 254f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 255f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Synopsis: 256f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ValuesIn(const T (&array)[N]) 257f904a612d9444ab36c07a8e619c113432e046f49vladlosev// - returns a generator producing sequences with elements from 258f904a612d9444ab36c07a8e619c113432e046f49vladlosev// a C-style array. 259f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ValuesIn(const Container& container) 260f904a612d9444ab36c07a8e619c113432e046f49vladlosev// - returns a generator producing sequences with elements from 261f904a612d9444ab36c07a8e619c113432e046f49vladlosev// an STL-style container. 262f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ValuesIn(Iterator begin, Iterator end) 263f904a612d9444ab36c07a8e619c113432e046f49vladlosev// - returns a generator producing sequences with elements from 264f904a612d9444ab36c07a8e619c113432e046f49vladlosev// a range [begin, end) defined by a pair of STL-style iterators. These 265f904a612d9444ab36c07a8e619c113432e046f49vladlosev// iterators can also be plain C pointers. 266f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 267f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Please note that ValuesIn copies the values from the containers 268f904a612d9444ab36c07a8e619c113432e046f49vladlosev// passed in and keeps them to generate tests in RUN_ALL_TESTS(). 269f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 270f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Examples: 271f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 272f904a612d9444ab36c07a8e619c113432e046f49vladlosev// This instantiates tests from test case StringTest 273f904a612d9444ab36c07a8e619c113432e046f49vladlosev// each with C-string values of "foo", "bar", and "baz": 274f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 275f904a612d9444ab36c07a8e619c113432e046f49vladlosev// const char* strings[] = {"foo", "bar", "baz"}; 276f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings)); 277f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 278f904a612d9444ab36c07a8e619c113432e046f49vladlosev// This instantiates tests from test case StlStringTest 279f904a612d9444ab36c07a8e619c113432e046f49vladlosev// each with STL strings with values "a" and "b": 280f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 281f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ::std::vector< ::std::string> GetParameterStrings() { 282f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ::std::vector< ::std::string> v; 283f904a612d9444ab36c07a8e619c113432e046f49vladlosev// v.push_back("a"); 284f904a612d9444ab36c07a8e619c113432e046f49vladlosev// v.push_back("b"); 285f904a612d9444ab36c07a8e619c113432e046f49vladlosev// return v; 286f904a612d9444ab36c07a8e619c113432e046f49vladlosev// } 287f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 288f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INSTANTIATE_TEST_CASE_P(CharSequence, 289f904a612d9444ab36c07a8e619c113432e046f49vladlosev// StlStringTest, 290f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ValuesIn(GetParameterStrings())); 291f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 292f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 293f904a612d9444ab36c07a8e619c113432e046f49vladlosev// This will also instantiate tests from CharTest 294f904a612d9444ab36c07a8e619c113432e046f49vladlosev// each with parameter values 'a' and 'b': 295f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 296f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ::std::list<char> GetParameterChars() { 297f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ::std::list<char> list; 298f904a612d9444ab36c07a8e619c113432e046f49vladlosev// list.push_back('a'); 299f904a612d9444ab36c07a8e619c113432e046f49vladlosev// list.push_back('b'); 300f904a612d9444ab36c07a8e619c113432e046f49vladlosev// return list; 301f904a612d9444ab36c07a8e619c113432e046f49vladlosev// } 302f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ::std::list<char> l = GetParameterChars(); 303f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INSTANTIATE_TEST_CASE_P(CharSequence2, 304f904a612d9444ab36c07a8e619c113432e046f49vladlosev// CharTest, 305f904a612d9444ab36c07a8e619c113432e046f49vladlosev// ValuesIn(l.begin(), l.end())); 306f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 307f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename ForwardIterator> 308f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ParamGenerator< 3096624187c3141f7ca403056062c440582630cd909zhanyong.wan typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type> 3106624187c3141f7ca403056062c440582630cd909zhanyong.wanValuesIn(ForwardIterator begin, ForwardIterator end) { 3116624187c3141f7ca403056062c440582630cd909zhanyong.wan typedef typename ::testing::internal::IteratorTraits<ForwardIterator> 3126624187c3141f7ca403056062c440582630cd909zhanyong.wan ::value_type ParamType; 313f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ParamGenerator<ParamType>( 314f904a612d9444ab36c07a8e619c113432e046f49vladlosev new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end)); 315f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 316f904a612d9444ab36c07a8e619c113432e046f49vladlosev 317f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T, size_t N> 318f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ParamGenerator<T> ValuesIn(const T (&array)[N]) { 319f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(array, array + N); 320f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 321f904a612d9444ab36c07a8e619c113432e046f49vladlosev 322f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <class Container> 323f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ParamGenerator<typename Container::value_type> ValuesIn( 324f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Container& container) { 325f904a612d9444ab36c07a8e619c113432e046f49vladlosev return ValuesIn(container.begin(), container.end()); 326f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 327f904a612d9444ab36c07a8e619c113432e046f49vladlosev 328f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Values() allows generating tests from explicitly specified list of 329f904a612d9444ab36c07a8e619c113432e046f49vladlosev// parameters. 330f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 331f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Synopsis: 332f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Values(T v1, T v2, ..., T vN) 333f904a612d9444ab36c07a8e619c113432e046f49vladlosev// - returns a generator producing sequences with elements v1, v2, ..., vN. 334f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 335f904a612d9444ab36c07a8e619c113432e046f49vladlosev// For example, this instantiates tests from test case BarTest each 336f904a612d9444ab36c07a8e619c113432e046f49vladlosev// with values "one", "two", and "three": 337f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 338f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three")); 339f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 340f904a612d9444ab36c07a8e619c113432e046f49vladlosev// This instantiates tests from test case BazTest each with values 1, 2, 3.5. 341f904a612d9444ab36c07a8e619c113432e046f49vladlosev// The exact type of values will depend on the type of parameter in BazTest. 342f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 343f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5)); 344f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 345f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Currently, Values() supports from 1 to 50 parameters. 346f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 347f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1> 348f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray1<T1> Values(T1 v1) { 349f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray1<T1>(v1); 350f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 351f904a612d9444ab36c07a8e619c113432e046f49vladlosev 352f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2> 353f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray2<T1, T2> Values(T1 v1, T2 v2) { 354f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray2<T1, T2>(v1, v2); 355f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 356f904a612d9444ab36c07a8e619c113432e046f49vladlosev 357f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3> 358f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) { 359f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray3<T1, T2, T3>(v1, v2, v3); 360f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 361f904a612d9444ab36c07a8e619c113432e046f49vladlosev 362f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4> 363f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) { 364f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray4<T1, T2, T3, T4>(v1, v2, v3, v4); 365f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 366f904a612d9444ab36c07a8e619c113432e046f49vladlosev 367f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5> 368f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4, 369f904a612d9444ab36c07a8e619c113432e046f49vladlosev T5 v5) { 370f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5); 371f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 372f904a612d9444ab36c07a8e619c113432e046f49vladlosev 373f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 374f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6> 375f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3, 376f904a612d9444ab36c07a8e619c113432e046f49vladlosev T4 v4, T5 v5, T6 v6) { 377f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6); 378f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 379f904a612d9444ab36c07a8e619c113432e046f49vladlosev 380f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 381f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7> 382f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3, 383f904a612d9444ab36c07a8e619c113432e046f49vladlosev T4 v4, T5 v5, T6 v6, T7 v7) { 384f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5, 385f904a612d9444ab36c07a8e619c113432e046f49vladlosev v6, v7); 386f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 387f904a612d9444ab36c07a8e619c113432e046f49vladlosev 388f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 389f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8> 390f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2, 391f904a612d9444ab36c07a8e619c113432e046f49vladlosev T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) { 392f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4, 393f904a612d9444ab36c07a8e619c113432e046f49vladlosev v5, v6, v7, v8); 394f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 395f904a612d9444ab36c07a8e619c113432e046f49vladlosev 396f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 397f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9> 398f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2, 399f904a612d9444ab36c07a8e619c113432e046f49vladlosev T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) { 400f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3, 401f904a612d9444ab36c07a8e619c113432e046f49vladlosev v4, v5, v6, v7, v8, v9); 402f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 403f904a612d9444ab36c07a8e619c113432e046f49vladlosev 404f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 405f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10> 406f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1, 407f904a612d9444ab36c07a8e619c113432e046f49vladlosev T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) { 408f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1, 409f904a612d9444ab36c07a8e619c113432e046f49vladlosev v2, v3, v4, v5, v6, v7, v8, v9, v10); 410f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 411f904a612d9444ab36c07a8e619c113432e046f49vladlosev 412f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 413f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 414f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11> 415f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 416f904a612d9444ab36c07a8e619c113432e046f49vladlosev T11> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 417f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11) { 418f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, 419f904a612d9444ab36c07a8e619c113432e046f49vladlosev T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); 420f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 421f904a612d9444ab36c07a8e619c113432e046f49vladlosev 422f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 423f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 424f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12> 425f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 426f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 427f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12) { 428f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 429f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12); 430f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 431f904a612d9444ab36c07a8e619c113432e046f49vladlosev 432f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 433f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 434f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13> 435f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, 436f904a612d9444ab36c07a8e619c113432e046f49vladlosev T13> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 437f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13) { 438f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 439f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); 440f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 441f904a612d9444ab36c07a8e619c113432e046f49vladlosev 442f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 443f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 444f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14> 445f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 446f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 447f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) { 448f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 449f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, 450f904a612d9444ab36c07a8e619c113432e046f49vladlosev v14); 451f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 452f904a612d9444ab36c07a8e619c113432e046f49vladlosev 453f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 454f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 455f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15> 456f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 457f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, 458f904a612d9444ab36c07a8e619c113432e046f49vladlosev T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) { 459f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 460f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, 461f904a612d9444ab36c07a8e619c113432e046f49vladlosev v13, v14, v15); 462f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 463f904a612d9444ab36c07a8e619c113432e046f49vladlosev 464f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 465f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 466f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 467f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16> 468f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 469f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 470f904a612d9444ab36c07a8e619c113432e046f49vladlosev T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 471f904a612d9444ab36c07a8e619c113432e046f49vladlosev T16 v16) { 472f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 473f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, 474f904a612d9444ab36c07a8e619c113432e046f49vladlosev v12, v13, v14, v15, v16); 475f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 476f904a612d9444ab36c07a8e619c113432e046f49vladlosev 477f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 478f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 479f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 480f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17> 481f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 482f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 483f904a612d9444ab36c07a8e619c113432e046f49vladlosev T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 484f904a612d9444ab36c07a8e619c113432e046f49vladlosev T16 v16, T17 v17) { 485f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 486f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, 487f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11, v12, v13, v14, v15, v16, v17); 488f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 489f904a612d9444ab36c07a8e619c113432e046f49vladlosev 490f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 491f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 492f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 493f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18> 494f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 495f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, 496f904a612d9444ab36c07a8e619c113432e046f49vladlosev T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 497f904a612d9444ab36c07a8e619c113432e046f49vladlosev T16 v16, T17 v17, T18 v18) { 498f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 499f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18>(v1, v2, v3, v4, v5, v6, v7, v8, v9, 500f904a612d9444ab36c07a8e619c113432e046f49vladlosev v10, v11, v12, v13, v14, v15, v16, v17, v18); 501f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 502f904a612d9444ab36c07a8e619c113432e046f49vladlosev 503f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 504f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 505f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 506f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19> 507f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 508f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, 509f904a612d9444ab36c07a8e619c113432e046f49vladlosev T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, 510f904a612d9444ab36c07a8e619c113432e046f49vladlosev T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) { 511f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 512f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19>(v1, v2, v3, v4, v5, v6, v7, v8, 513f904a612d9444ab36c07a8e619c113432e046f49vladlosev v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19); 514f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 515f904a612d9444ab36c07a8e619c113432e046f49vladlosev 516f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 517f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 518f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 519f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20> 520f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 521f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20> Values(T1 v1, T2 v2, T3 v3, T4 v4, 522f904a612d9444ab36c07a8e619c113432e046f49vladlosev T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, 523f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) { 524f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 525f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20>(v1, v2, v3, v4, v5, v6, v7, 526f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20); 527f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 528f904a612d9444ab36c07a8e619c113432e046f49vladlosev 529f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 530f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 531f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 532f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 533f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21> 534f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 535f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21> Values(T1 v1, T2 v2, T3 v3, T4 v4, 536f904a612d9444ab36c07a8e619c113432e046f49vladlosev T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, 537f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) { 538f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 539f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(v1, v2, v3, v4, v5, v6, 540f904a612d9444ab36c07a8e619c113432e046f49vladlosev v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21); 541f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 542f904a612d9444ab36c07a8e619c113432e046f49vladlosev 543f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 544f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 545f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 546f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 547f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22> 548f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 549f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22> Values(T1 v1, T2 v2, T3 v3, 550f904a612d9444ab36c07a8e619c113432e046f49vladlosev T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 551f904a612d9444ab36c07a8e619c113432e046f49vladlosev T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 552f904a612d9444ab36c07a8e619c113432e046f49vladlosev T21 v21, T22 v22) { 553f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 554f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4, 555f904a612d9444ab36c07a8e619c113432e046f49vladlosev v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, 556f904a612d9444ab36c07a8e619c113432e046f49vladlosev v20, v21, v22); 557f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 558f904a612d9444ab36c07a8e619c113432e046f49vladlosev 559f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 560f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 561f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 562f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 563f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23> 564f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 565f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> Values(T1 v1, T2 v2, 566f904a612d9444ab36c07a8e619c113432e046f49vladlosev T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 567f904a612d9444ab36c07a8e619c113432e046f49vladlosev T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 568f904a612d9444ab36c07a8e619c113432e046f49vladlosev T21 v21, T22 v22, T23 v23) { 569f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 570f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>(v1, v2, v3, 571f904a612d9444ab36c07a8e619c113432e046f49vladlosev v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, 572f904a612d9444ab36c07a8e619c113432e046f49vladlosev v20, v21, v22, v23); 573f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 574f904a612d9444ab36c07a8e619c113432e046f49vladlosev 575f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 576f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 577f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 578f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 579f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24> 580f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 581f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Values(T1 v1, T2 v2, 582f904a612d9444ab36c07a8e619c113432e046f49vladlosev T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 583f904a612d9444ab36c07a8e619c113432e046f49vladlosev T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 584f904a612d9444ab36c07a8e619c113432e046f49vladlosev T21 v21, T22 v22, T23 v23, T24 v24) { 585f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 586f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>(v1, v2, 587f904a612d9444ab36c07a8e619c113432e046f49vladlosev v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, 588f904a612d9444ab36c07a8e619c113432e046f49vladlosev v19, v20, v21, v22, v23, v24); 589f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 590f904a612d9444ab36c07a8e619c113432e046f49vladlosev 591f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 592f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 593f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 594f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 595f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25> 596f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 597f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Values(T1 v1, 598f904a612d9444ab36c07a8e619c113432e046f49vladlosev T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, 599f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, 600f904a612d9444ab36c07a8e619c113432e046f49vladlosev T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) { 601f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 602f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>(v1, 603f904a612d9444ab36c07a8e619c113432e046f49vladlosev v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, 604f904a612d9444ab36c07a8e619c113432e046f49vladlosev v18, v19, v20, v21, v22, v23, v24, v25); 605f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 606f904a612d9444ab36c07a8e619c113432e046f49vladlosev 607f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 608f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 609f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 610f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 611f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 612f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26> 613f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 614f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 615f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 616f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 617f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 618f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26) { 619f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 620f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 621f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, 622f904a612d9444ab36c07a8e619c113432e046f49vladlosev v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26); 623f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 624f904a612d9444ab36c07a8e619c113432e046f49vladlosev 625f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 626f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 627f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 628f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 629f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 630f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27> 631f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 632f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, 633f904a612d9444ab36c07a8e619c113432e046f49vladlosev T27> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 634f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 635f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 636f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27) { 637f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 638f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 639f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, 640f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); 641f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 642f904a612d9444ab36c07a8e619c113432e046f49vladlosev 643f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 644f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 645f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 646f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 647f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 648f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28> 649f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 650f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, 651f904a612d9444ab36c07a8e619c113432e046f49vladlosev T28> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 652f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 653f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 654f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28) { 655f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 656f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 657f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, 658f904a612d9444ab36c07a8e619c113432e046f49vladlosev v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, 659f904a612d9444ab36c07a8e619c113432e046f49vladlosev v28); 660f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 661f904a612d9444ab36c07a8e619c113432e046f49vladlosev 662f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 663f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 664f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 665f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 666f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 667f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29> 668f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 669f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 670f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 671f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 672f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 673f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29) { 674f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 675f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 676f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, 677f904a612d9444ab36c07a8e619c113432e046f49vladlosev v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, 678f904a612d9444ab36c07a8e619c113432e046f49vladlosev v27, v28, v29); 679f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 680f904a612d9444ab36c07a8e619c113432e046f49vladlosev 681f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 682f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 683f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 684f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 685f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 686f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30> 687f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 688f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 689f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, 690f904a612d9444ab36c07a8e619c113432e046f49vladlosev T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, 691f904a612d9444ab36c07a8e619c113432e046f49vladlosev T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, 692f904a612d9444ab36c07a8e619c113432e046f49vladlosev T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) { 693f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 694f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 695f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, 696f904a612d9444ab36c07a8e619c113432e046f49vladlosev v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, 697f904a612d9444ab36c07a8e619c113432e046f49vladlosev v26, v27, v28, v29, v30); 698f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 699f904a612d9444ab36c07a8e619c113432e046f49vladlosev 700f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 701f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 702f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 703f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 704f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 705f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 706f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31> 707f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 708f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 709f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 710f904a612d9444ab36c07a8e619c113432e046f49vladlosev T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 711f904a612d9444ab36c07a8e619c113432e046f49vladlosev T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 712f904a612d9444ab36c07a8e619c113432e046f49vladlosev T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) { 713f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 714f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 715f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, 716f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, 717f904a612d9444ab36c07a8e619c113432e046f49vladlosev v25, v26, v27, v28, v29, v30, v31); 718f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 719f904a612d9444ab36c07a8e619c113432e046f49vladlosev 720f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 721f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 722f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 723f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 724f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 725f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 726f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32> 727f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 728f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 729f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 730f904a612d9444ab36c07a8e619c113432e046f49vladlosev T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 731f904a612d9444ab36c07a8e619c113432e046f49vladlosev T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 732f904a612d9444ab36c07a8e619c113432e046f49vladlosev T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, 733f904a612d9444ab36c07a8e619c113432e046f49vladlosev T32 v32) { 734f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 735f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 736f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9, 737f904a612d9444ab36c07a8e619c113432e046f49vladlosev v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, 738f904a612d9444ab36c07a8e619c113432e046f49vladlosev v24, v25, v26, v27, v28, v29, v30, v31, v32); 739f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 740f904a612d9444ab36c07a8e619c113432e046f49vladlosev 741f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 742f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 743f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 744f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 745f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 746f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 747f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33> 748f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 749f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 750f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, 751f904a612d9444ab36c07a8e619c113432e046f49vladlosev T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 752f904a612d9444ab36c07a8e619c113432e046f49vladlosev T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 753f904a612d9444ab36c07a8e619c113432e046f49vladlosev T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, 754f904a612d9444ab36c07a8e619c113432e046f49vladlosev T32 v32, T33 v33) { 755f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 756f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 757f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8, 758f904a612d9444ab36c07a8e619c113432e046f49vladlosev v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, 759f904a612d9444ab36c07a8e619c113432e046f49vladlosev v24, v25, v26, v27, v28, v29, v30, v31, v32, v33); 760f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 761f904a612d9444ab36c07a8e619c113432e046f49vladlosev 762f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 763f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 764f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 765f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 766f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 767f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 768f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34> 769f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 770f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 771f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, 772f904a612d9444ab36c07a8e619c113432e046f49vladlosev T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, 773f904a612d9444ab36c07a8e619c113432e046f49vladlosev T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, 774f904a612d9444ab36c07a8e619c113432e046f49vladlosev T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, 775f904a612d9444ab36c07a8e619c113432e046f49vladlosev T31 v31, T32 v32, T33 v33, T34 v34) { 776f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 777f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 778f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34>(v1, v2, v3, v4, v5, v6, v7, 779f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, 780f904a612d9444ab36c07a8e619c113432e046f49vladlosev v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34); 781f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 782f904a612d9444ab36c07a8e619c113432e046f49vladlosev 783f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 784f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 785f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 786f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 787f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 788f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 789f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35> 790f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 791f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 792f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35> Values(T1 v1, T2 v2, T3 v3, T4 v4, 793f904a612d9444ab36c07a8e619c113432e046f49vladlosev T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, 794f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, 795f904a612d9444ab36c07a8e619c113432e046f49vladlosev T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, 796f904a612d9444ab36c07a8e619c113432e046f49vladlosev T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) { 797f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 798f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 799f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35>(v1, v2, v3, v4, v5, v6, 800f904a612d9444ab36c07a8e619c113432e046f49vladlosev v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, 801f904a612d9444ab36c07a8e619c113432e046f49vladlosev v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35); 802f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 803f904a612d9444ab36c07a8e619c113432e046f49vladlosev 804f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 805f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 806f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 807f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 808f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 809f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 810f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 811f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36> 812f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 813f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 814f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36> Values(T1 v1, T2 v2, T3 v3, T4 v4, 815f904a612d9444ab36c07a8e619c113432e046f49vladlosev T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, 816f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, 817f904a612d9444ab36c07a8e619c113432e046f49vladlosev T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, 818f904a612d9444ab36c07a8e619c113432e046f49vladlosev T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) { 819f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 820f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 821f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>(v1, v2, v3, v4, 822f904a612d9444ab36c07a8e619c113432e046f49vladlosev v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, 823f904a612d9444ab36c07a8e619c113432e046f49vladlosev v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, 824f904a612d9444ab36c07a8e619c113432e046f49vladlosev v34, v35, v36); 825f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 826f904a612d9444ab36c07a8e619c113432e046f49vladlosev 827f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 828f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 829f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 830f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 831f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 832f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 833f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 834f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37> 835f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 836f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 837f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37> Values(T1 v1, T2 v2, T3 v3, 838f904a612d9444ab36c07a8e619c113432e046f49vladlosev T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 839f904a612d9444ab36c07a8e619c113432e046f49vladlosev T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 840f904a612d9444ab36c07a8e619c113432e046f49vladlosev T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, 841f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, 842f904a612d9444ab36c07a8e619c113432e046f49vladlosev T37 v37) { 843f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 844f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 845f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3, 846f904a612d9444ab36c07a8e619c113432e046f49vladlosev v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, 847f904a612d9444ab36c07a8e619c113432e046f49vladlosev v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, 848f904a612d9444ab36c07a8e619c113432e046f49vladlosev v34, v35, v36, v37); 849f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 850f904a612d9444ab36c07a8e619c113432e046f49vladlosev 851f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 852f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 853f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 854f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 855f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 856f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 857f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 858f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38> 859f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 860f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 861f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Values(T1 v1, T2 v2, 862f904a612d9444ab36c07a8e619c113432e046f49vladlosev T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 863f904a612d9444ab36c07a8e619c113432e046f49vladlosev T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 864f904a612d9444ab36c07a8e619c113432e046f49vladlosev T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, 865f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, 866f904a612d9444ab36c07a8e619c113432e046f49vladlosev T37 v37, T38 v38) { 867f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 868f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 869f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2, 870f904a612d9444ab36c07a8e619c113432e046f49vladlosev v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, 871f904a612d9444ab36c07a8e619c113432e046f49vladlosev v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, 872f904a612d9444ab36c07a8e619c113432e046f49vladlosev v33, v34, v35, v36, v37, v38); 873f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 874f904a612d9444ab36c07a8e619c113432e046f49vladlosev 875f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 876f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 877f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 878f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 879f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 880f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 881f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 882f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39> 883f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 884f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 885f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Values(T1 v1, T2 v2, 886f904a612d9444ab36c07a8e619c113432e046f49vladlosev T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, 887f904a612d9444ab36c07a8e619c113432e046f49vladlosev T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, 888f904a612d9444ab36c07a8e619c113432e046f49vladlosev T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, 889f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, 890f904a612d9444ab36c07a8e619c113432e046f49vladlosev T37 v37, T38 v38, T39 v39) { 891f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 892f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 893f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>(v1, 894f904a612d9444ab36c07a8e619c113432e046f49vladlosev v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, 895f904a612d9444ab36c07a8e619c113432e046f49vladlosev v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, 896f904a612d9444ab36c07a8e619c113432e046f49vladlosev v32, v33, v34, v35, v36, v37, v38, v39); 897f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 898f904a612d9444ab36c07a8e619c113432e046f49vladlosev 899f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 900f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 901f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 902f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 903f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 904f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 905f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 906f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40> 907f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 908f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 909f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Values(T1 v1, 910f904a612d9444ab36c07a8e619c113432e046f49vladlosev T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, 911f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, 912f904a612d9444ab36c07a8e619c113432e046f49vladlosev T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, 913f904a612d9444ab36c07a8e619c113432e046f49vladlosev T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, 914f904a612d9444ab36c07a8e619c113432e046f49vladlosev T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) { 915f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 916f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 917f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 918f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, 919f904a612d9444ab36c07a8e619c113432e046f49vladlosev v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, 920f904a612d9444ab36c07a8e619c113432e046f49vladlosev v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40); 921f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 922f904a612d9444ab36c07a8e619c113432e046f49vladlosev 923f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 924f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 925f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 926f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 927f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 928f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 929f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 930f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 931f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41> 932f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 933f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 934f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, 935f904a612d9444ab36c07a8e619c113432e046f49vladlosev T41> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 936f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 937f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 938f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 939f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) { 940f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 941f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 942f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 943f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40, T41>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, 944f904a612d9444ab36c07a8e619c113432e046f49vladlosev v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, 945f904a612d9444ab36c07a8e619c113432e046f49vladlosev v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41); 946f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 947f904a612d9444ab36c07a8e619c113432e046f49vladlosev 948f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 949f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 950f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 951f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 952f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 953f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 954f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 955f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 956f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42> 957f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 958f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 959f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, 960f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 961f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 962f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 963f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 964f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 965f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42) { 966f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 967f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 968f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 969f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, 970f904a612d9444ab36c07a8e619c113432e046f49vladlosev v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, 971f904a612d9444ab36c07a8e619c113432e046f49vladlosev v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, 972f904a612d9444ab36c07a8e619c113432e046f49vladlosev v42); 973f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 974f904a612d9444ab36c07a8e619c113432e046f49vladlosev 975f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 976f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 977f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 978f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 979f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 980f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 981f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 982f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 983f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43> 984f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 985f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 986f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, 987f904a612d9444ab36c07a8e619c113432e046f49vladlosev T43> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 988f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 989f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 990f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 991f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 992f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42, T43 v43) { 993f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 994f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 995f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 996f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, 997f904a612d9444ab36c07a8e619c113432e046f49vladlosev v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, 998f904a612d9444ab36c07a8e619c113432e046f49vladlosev v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, 999f904a612d9444ab36c07a8e619c113432e046f49vladlosev v41, v42, v43); 1000f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1001f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1002f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1003f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1004f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1005f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1006f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1007f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1008f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 1009f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 1010f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44> 1011f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1012f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1013f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1014f904a612d9444ab36c07a8e619c113432e046f49vladlosev T44> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, 1015f904a612d9444ab36c07a8e619c113432e046f49vladlosev T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, 1016f904a612d9444ab36c07a8e619c113432e046f49vladlosev T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, 1017f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, 1018f904a612d9444ab36c07a8e619c113432e046f49vladlosev T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41, 1019f904a612d9444ab36c07a8e619c113432e046f49vladlosev T42 v42, T43 v43, T44 v44) { 1020f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1021f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1022f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1023f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40, T41, T42, T43, T44>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, 1024f904a612d9444ab36c07a8e619c113432e046f49vladlosev v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, 1025f904a612d9444ab36c07a8e619c113432e046f49vladlosev v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, 1026f904a612d9444ab36c07a8e619c113432e046f49vladlosev v40, v41, v42, v43, v44); 1027f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1028f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1029f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1030f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1031f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1032f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1033f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1034f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1035f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 1036f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 1037f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45> 1038f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1039f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1040f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1041f904a612d9444ab36c07a8e619c113432e046f49vladlosev T44, T45> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, 1042f904a612d9444ab36c07a8e619c113432e046f49vladlosev T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, 1043f904a612d9444ab36c07a8e619c113432e046f49vladlosev T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, 1044f904a612d9444ab36c07a8e619c113432e046f49vladlosev T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, 1045f904a612d9444ab36c07a8e619c113432e046f49vladlosev T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, 1046f904a612d9444ab36c07a8e619c113432e046f49vladlosev T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) { 1047f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1048f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1049f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1050f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40, T41, T42, T43, T44, T45>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, 1051f904a612d9444ab36c07a8e619c113432e046f49vladlosev v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, 1052f904a612d9444ab36c07a8e619c113432e046f49vladlosev v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, 1053f904a612d9444ab36c07a8e619c113432e046f49vladlosev v39, v40, v41, v42, v43, v44, v45); 1054f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1055f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1056f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1057f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1058f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1059f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1060f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1061f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1062f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 1063f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 1064f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45, 1065f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T46> 1066f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1067f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1068f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1069f904a612d9444ab36c07a8e619c113432e046f49vladlosev T44, T45, T46> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 1070f904a612d9444ab36c07a8e619c113432e046f49vladlosev T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 1071f904a612d9444ab36c07a8e619c113432e046f49vladlosev T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 1072f904a612d9444ab36c07a8e619c113432e046f49vladlosev T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, 1073f904a612d9444ab36c07a8e619c113432e046f49vladlosev T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, 1074f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) { 1075f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1076f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1077f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1078f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40, T41, T42, T43, T44, T45, T46>(v1, v2, v3, v4, v5, v6, v7, v8, v9, 1079f904a612d9444ab36c07a8e619c113432e046f49vladlosev v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, 1080f904a612d9444ab36c07a8e619c113432e046f49vladlosev v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, 1081f904a612d9444ab36c07a8e619c113432e046f49vladlosev v38, v39, v40, v41, v42, v43, v44, v45, v46); 1082f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1083f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1084f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1085f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1086f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1087f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1088f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1089f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1090f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 1091f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 1092f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45, 1093f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T46, typename T47> 1094f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1095f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1096f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1097f904a612d9444ab36c07a8e619c113432e046f49vladlosev T44, T45, T46, T47> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, 1098f904a612d9444ab36c07a8e619c113432e046f49vladlosev T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 1099f904a612d9444ab36c07a8e619c113432e046f49vladlosev T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 1100f904a612d9444ab36c07a8e619c113432e046f49vladlosev T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, 1101f904a612d9444ab36c07a8e619c113432e046f49vladlosev T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, 1102f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) { 1103f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1104f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1105f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1106f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40, T41, T42, T43, T44, T45, T46, T47>(v1, v2, v3, v4, v5, v6, v7, v8, 1107f904a612d9444ab36c07a8e619c113432e046f49vladlosev v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, 1108f904a612d9444ab36c07a8e619c113432e046f49vladlosev v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, 1109f904a612d9444ab36c07a8e619c113432e046f49vladlosev v38, v39, v40, v41, v42, v43, v44, v45, v46, v47); 1110f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1111f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1112f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1113f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1114f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1115f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1116f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1117f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1118f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 1119f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 1120f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45, 1121f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T46, typename T47, typename T48> 1122f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1123f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1124f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1125f904a612d9444ab36c07a8e619c113432e046f49vladlosev T44, T45, T46, T47, T48> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, 1126f904a612d9444ab36c07a8e619c113432e046f49vladlosev T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, 1127f904a612d9444ab36c07a8e619c113432e046f49vladlosev T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, 1128f904a612d9444ab36c07a8e619c113432e046f49vladlosev T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, 1129f904a612d9444ab36c07a8e619c113432e046f49vladlosev T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, 1130f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, 1131f904a612d9444ab36c07a8e619c113432e046f49vladlosev T48 v48) { 1132f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1133f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1134f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1135f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7, 1136f904a612d9444ab36c07a8e619c113432e046f49vladlosev v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, 1137f904a612d9444ab36c07a8e619c113432e046f49vladlosev v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, 1138f904a612d9444ab36c07a8e619c113432e046f49vladlosev v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48); 1139f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1140f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1141f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1142f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1143f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1144f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1145f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1146f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1147f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 1148f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 1149f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45, 1150f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T46, typename T47, typename T48, typename T49> 1151f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1152f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1153f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1154f904a612d9444ab36c07a8e619c113432e046f49vladlosev T44, T45, T46, T47, T48, T49> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, 1155f904a612d9444ab36c07a8e619c113432e046f49vladlosev T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, 1156f904a612d9444ab36c07a8e619c113432e046f49vladlosev T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, 1157f904a612d9444ab36c07a8e619c113432e046f49vladlosev T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, 1158f904a612d9444ab36c07a8e619c113432e046f49vladlosev T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, 1159f904a612d9444ab36c07a8e619c113432e046f49vladlosev T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, 1160f904a612d9444ab36c07a8e619c113432e046f49vladlosev T47 v47, T48 v48, T49 v49) { 1161f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1162f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1163f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1164f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40, T41, T42, T43, T44, T45, T46, T47, T48, T49>(v1, v2, v3, v4, v5, v6, 1165f904a612d9444ab36c07a8e619c113432e046f49vladlosev v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, 1166f904a612d9444ab36c07a8e619c113432e046f49vladlosev v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, 1167f904a612d9444ab36c07a8e619c113432e046f49vladlosev v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49); 1168f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1169f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1170f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename T1, typename T2, typename T3, typename T4, typename T5, 1171f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T6, typename T7, typename T8, typename T9, typename T10, 1172f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T11, typename T12, typename T13, typename T14, typename T15, 1173f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T16, typename T17, typename T18, typename T19, typename T20, 1174f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T21, typename T22, typename T23, typename T24, typename T25, 1175f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T26, typename T27, typename T28, typename T29, typename T30, 1176f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T31, typename T32, typename T33, typename T34, typename T35, 1177f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T36, typename T37, typename T38, typename T39, typename T40, 1178f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T41, typename T42, typename T43, typename T44, typename T45, 1179f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename T46, typename T47, typename T48, typename T49, typename T50> 1180f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, 1181f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, 1182f904a612d9444ab36c07a8e619c113432e046f49vladlosev T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, 1183f904a612d9444ab36c07a8e619c113432e046f49vladlosev T44, T45, T46, T47, T48, T49, T50> Values(T1 v1, T2 v2, T3 v3, T4 v4, 1184f904a612d9444ab36c07a8e619c113432e046f49vladlosev T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, 1185f904a612d9444ab36c07a8e619c113432e046f49vladlosev T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, 1186f904a612d9444ab36c07a8e619c113432e046f49vladlosev T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, 1187f904a612d9444ab36c07a8e619c113432e046f49vladlosev T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, 1188f904a612d9444ab36c07a8e619c113432e046f49vladlosev T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, 1189f904a612d9444ab36c07a8e619c113432e046f49vladlosev T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) { 1190f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, 1191f904a612d9444ab36c07a8e619c113432e046f49vladlosev T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, 1192f904a612d9444ab36c07a8e619c113432e046f49vladlosev T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, 1193f904a612d9444ab36c07a8e619c113432e046f49vladlosev T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4, 1194f904a612d9444ab36c07a8e619c113432e046f49vladlosev v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, 1195f904a612d9444ab36c07a8e619c113432e046f49vladlosev v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, 1196f904a612d9444ab36c07a8e619c113432e046f49vladlosev v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, 1197f904a612d9444ab36c07a8e619c113432e046f49vladlosev v48, v49, v50); 1198f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1199f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1200f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Bool() allows generating tests with parameters in a set of (false, true). 1201f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1202f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Synopsis: 1203f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Bool() 1204f904a612d9444ab36c07a8e619c113432e046f49vladlosev// - returns a generator producing sequences with elements {false, true}. 1205f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1206f904a612d9444ab36c07a8e619c113432e046f49vladlosev// It is useful when testing code that depends on Boolean flags. Combinations 1207f904a612d9444ab36c07a8e619c113432e046f49vladlosev// of multiple flags can be tested when several Bool()'s are combined using 1208f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Combine() function. 1209f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1210f904a612d9444ab36c07a8e619c113432e046f49vladlosev// In the following example all tests in the test case FlagDependentTest 1211f904a612d9444ab36c07a8e619c113432e046f49vladlosev// will be instantiated twice with parameters false and true. 1212f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1213f904a612d9444ab36c07a8e619c113432e046f49vladlosev// class FlagDependentTest : public testing::TestWithParam<bool> { 1214f904a612d9444ab36c07a8e619c113432e046f49vladlosev// virtual void SetUp() { 1215f904a612d9444ab36c07a8e619c113432e046f49vladlosev// external_flag = GetParam(); 1216f904a612d9444ab36c07a8e619c113432e046f49vladlosev// } 1217f904a612d9444ab36c07a8e619c113432e046f49vladlosev// } 1218f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool()); 1219f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1220f904a612d9444ab36c07a8e619c113432e046f49vladlosevinline internal::ParamGenerator<bool> Bool() { 1221f904a612d9444ab36c07a8e619c113432e046f49vladlosev return Values(false, true); 1222f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1223f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1224733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# if GTEST_HAS_COMBINE 1225f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Combine() allows the user to combine two or more sequences to produce 1226f904a612d9444ab36c07a8e619c113432e046f49vladlosev// values of a Cartesian product of those sequences' elements. 1227f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1228f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Synopsis: 1229f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Combine(gen1, gen2, ..., genN) 1230f904a612d9444ab36c07a8e619c113432e046f49vladlosev// - returns a generator producing sequences with elements coming from 1231f904a612d9444ab36c07a8e619c113432e046f49vladlosev// the Cartesian product of elements from the sequences generated by 1232f904a612d9444ab36c07a8e619c113432e046f49vladlosev// gen1, gen2, ..., genN. The sequence elements will have a type of 1233f904a612d9444ab36c07a8e619c113432e046f49vladlosev// tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types 1234f904a612d9444ab36c07a8e619c113432e046f49vladlosev// of elements from sequences produces by gen1, gen2, ..., genN. 1235f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1236f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Combine can have up to 10 arguments. This number is currently limited 1237f904a612d9444ab36c07a8e619c113432e046f49vladlosev// by the maximum number of elements in the tuple implementation used by Google 1238f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Test. 1239f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1240f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Example: 1241f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1242f904a612d9444ab36c07a8e619c113432e046f49vladlosev// This will instantiate tests in test case AnimalTest each one with 1243f904a612d9444ab36c07a8e619c113432e046f49vladlosev// the parameter values tuple("cat", BLACK), tuple("cat", WHITE), 1244f904a612d9444ab36c07a8e619c113432e046f49vladlosev// tuple("dog", BLACK), and tuple("dog", WHITE): 1245f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1246f904a612d9444ab36c07a8e619c113432e046f49vladlosev// enum Color { BLACK, GRAY, WHITE }; 1247f904a612d9444ab36c07a8e619c113432e046f49vladlosev// class AnimalTest 1248f904a612d9444ab36c07a8e619c113432e046f49vladlosev// : public testing::TestWithParam<tuple<const char*, Color> > {...}; 1249f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1250f904a612d9444ab36c07a8e619c113432e046f49vladlosev// TEST_P(AnimalTest, AnimalLooksNice) {...} 1251f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1252f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest, 1253f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Combine(Values("cat", "dog"), 1254f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Values(BLACK, WHITE))); 1255f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1256f904a612d9444ab36c07a8e619c113432e046f49vladlosev// This will instantiate tests in FlagDependentTest with all variations of two 1257f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Boolean flags: 1258f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1259f904a612d9444ab36c07a8e619c113432e046f49vladlosev// class FlagDependentTest 12607a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com// : public testing::TestWithParam<tuple<bool, bool> > { 1261f904a612d9444ab36c07a8e619c113432e046f49vladlosev// virtual void SetUp() { 1262f904a612d9444ab36c07a8e619c113432e046f49vladlosev// // Assigns external_flag_1 and external_flag_2 values from the tuple. 1263f904a612d9444ab36c07a8e619c113432e046f49vladlosev// tie(external_flag_1, external_flag_2) = GetParam(); 1264f904a612d9444ab36c07a8e619c113432e046f49vladlosev// } 1265f904a612d9444ab36c07a8e619c113432e046f49vladlosev// }; 1266f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1267f904a612d9444ab36c07a8e619c113432e046f49vladlosev// TEST_P(FlagDependentTest, TestFeature1) { 1268f904a612d9444ab36c07a8e619c113432e046f49vladlosev// // Test your code using external_flag_1 and external_flag_2 here. 1269f904a612d9444ab36c07a8e619c113432e046f49vladlosev// } 1270f904a612d9444ab36c07a8e619c113432e046f49vladlosev// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest, 1271f904a612d9444ab36c07a8e619c113432e046f49vladlosev// Combine(Bool(), Bool())); 1272f904a612d9444ab36c07a8e619c113432e046f49vladlosev// 1273f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename Generator1, typename Generator2> 1274f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::CartesianProductHolder2<Generator1, Generator2> Combine( 1275f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1& g1, const Generator2& g2) { 1276f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::CartesianProductHolder2<Generator1, Generator2>( 1277f904a612d9444ab36c07a8e619c113432e046f49vladlosev g1, g2); 1278f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1279f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1280f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename Generator1, typename Generator2, typename Generator3> 1281f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::CartesianProductHolder3<Generator1, Generator2, Generator3> Combine( 1282f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1& g1, const Generator2& g2, const Generator3& g3) { 1283f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::CartesianProductHolder3<Generator1, Generator2, Generator3>( 1284f904a612d9444ab36c07a8e619c113432e046f49vladlosev g1, g2, g3); 1285f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1286f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1287f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename Generator1, typename Generator2, typename Generator3, 1288f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator4> 1289f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::CartesianProductHolder4<Generator1, Generator2, Generator3, 1290f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4> Combine( 1291f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1& g1, const Generator2& g2, const Generator3& g3, 1292f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4& g4) { 1293f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::CartesianProductHolder4<Generator1, Generator2, Generator3, 1294f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4>( 1295f904a612d9444ab36c07a8e619c113432e046f49vladlosev g1, g2, g3, g4); 1296f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1297f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1298f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename Generator1, typename Generator2, typename Generator3, 1299f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator4, typename Generator5> 1300f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::CartesianProductHolder5<Generator1, Generator2, Generator3, 1301f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5> Combine( 1302f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1& g1, const Generator2& g2, const Generator3& g3, 1303f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4& g4, const Generator5& g5) { 1304f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::CartesianProductHolder5<Generator1, Generator2, Generator3, 1305f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5>( 1306f904a612d9444ab36c07a8e619c113432e046f49vladlosev g1, g2, g3, g4, g5); 1307f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1308f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1309f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename Generator1, typename Generator2, typename Generator3, 1310f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator4, typename Generator5, typename Generator6> 1311f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::CartesianProductHolder6<Generator1, Generator2, Generator3, 1312f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5, Generator6> Combine( 1313f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1& g1, const Generator2& g2, const Generator3& g3, 1314f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4& g4, const Generator5& g5, const Generator6& g6) { 1315f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::CartesianProductHolder6<Generator1, Generator2, Generator3, 1316f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5, Generator6>( 1317f904a612d9444ab36c07a8e619c113432e046f49vladlosev g1, g2, g3, g4, g5, g6); 1318f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1319f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1320f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename Generator1, typename Generator2, typename Generator3, 1321f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator4, typename Generator5, typename Generator6, 1322f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator7> 1323f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::CartesianProductHolder7<Generator1, Generator2, Generator3, 1324f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5, Generator6, Generator7> Combine( 1325f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1& g1, const Generator2& g2, const Generator3& g3, 1326f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4& g4, const Generator5& g5, const Generator6& g6, 1327f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator7& g7) { 1328f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::CartesianProductHolder7<Generator1, Generator2, Generator3, 1329f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5, Generator6, Generator7>( 1330f904a612d9444ab36c07a8e619c113432e046f49vladlosev g1, g2, g3, g4, g5, g6, g7); 1331f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1332f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1333f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename Generator1, typename Generator2, typename Generator3, 1334f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator4, typename Generator5, typename Generator6, 1335f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator7, typename Generator8> 1336f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::CartesianProductHolder8<Generator1, Generator2, Generator3, 1337f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5, Generator6, Generator7, Generator8> Combine( 1338f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1& g1, const Generator2& g2, const Generator3& g3, 1339f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4& g4, const Generator5& g5, const Generator6& g6, 1340f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator7& g7, const Generator8& g8) { 1341f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::CartesianProductHolder8<Generator1, Generator2, Generator3, 1342f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5, Generator6, Generator7, Generator8>( 1343f904a612d9444ab36c07a8e619c113432e046f49vladlosev g1, g2, g3, g4, g5, g6, g7, g8); 1344f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1345f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1346f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename Generator1, typename Generator2, typename Generator3, 1347f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator4, typename Generator5, typename Generator6, 1348f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator7, typename Generator8, typename Generator9> 1349f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::CartesianProductHolder9<Generator1, Generator2, Generator3, 1350f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5, Generator6, Generator7, Generator8, 1351f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator9> Combine( 1352f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1& g1, const Generator2& g2, const Generator3& g3, 1353f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4& g4, const Generator5& g5, const Generator6& g6, 1354f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator7& g7, const Generator8& g8, const Generator9& g9) { 1355f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::CartesianProductHolder9<Generator1, Generator2, Generator3, 1356f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>( 1357f904a612d9444ab36c07a8e619c113432e046f49vladlosev g1, g2, g3, g4, g5, g6, g7, g8, g9); 1358f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1359f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1360f904a612d9444ab36c07a8e619c113432e046f49vladlosevtemplate <typename Generator1, typename Generator2, typename Generator3, 1361f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator4, typename Generator5, typename Generator6, 1362f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator7, typename Generator8, typename Generator9, 1363f904a612d9444ab36c07a8e619c113432e046f49vladlosev typename Generator10> 1364f904a612d9444ab36c07a8e619c113432e046f49vladlosevinternal::CartesianProductHolder10<Generator1, Generator2, Generator3, 1365f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5, Generator6, Generator7, Generator8, Generator9, 1366f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator10> Combine( 1367f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator1& g1, const Generator2& g2, const Generator3& g3, 1368f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator4& g4, const Generator5& g5, const Generator6& g6, 1369f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator7& g7, const Generator8& g8, const Generator9& g9, 1370f904a612d9444ab36c07a8e619c113432e046f49vladlosev const Generator10& g10) { 1371f904a612d9444ab36c07a8e619c113432e046f49vladlosev return internal::CartesianProductHolder10<Generator1, Generator2, Generator3, 1372f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator4, Generator5, Generator6, Generator7, Generator8, Generator9, 1373f904a612d9444ab36c07a8e619c113432e046f49vladlosev Generator10>( 1374f904a612d9444ab36c07a8e619c113432e046f49vladlosev g1, g2, g3, g4, g5, g6, g7, g8, g9, g10); 1375f904a612d9444ab36c07a8e619c113432e046f49vladlosev} 1376733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif // GTEST_HAS_COMBINE 1377f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1378f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1379f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1380733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# define TEST_P(test_case_name, test_name) \ 1381f904a612d9444ab36c07a8e619c113432e046f49vladlosev class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \ 1382f904a612d9444ab36c07a8e619c113432e046f49vladlosev : public test_case_name { \ 1383f904a612d9444ab36c07a8e619c113432e046f49vladlosev public: \ 1384f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \ 1385f904a612d9444ab36c07a8e619c113432e046f49vladlosev virtual void TestBody(); \ 1386f904a612d9444ab36c07a8e619c113432e046f49vladlosev private: \ 1387f904a612d9444ab36c07a8e619c113432e046f49vladlosev static int AddToRegistry() { \ 1388f904a612d9444ab36c07a8e619c113432e046f49vladlosev ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ 1389f904a612d9444ab36c07a8e619c113432e046f49vladlosev GetTestCasePatternHolder<test_case_name>(\ 1390f904a612d9444ab36c07a8e619c113432e046f49vladlosev #test_case_name, __FILE__, __LINE__)->AddTestPattern(\ 1391f904a612d9444ab36c07a8e619c113432e046f49vladlosev #test_case_name, \ 1392f904a612d9444ab36c07a8e619c113432e046f49vladlosev #test_name, \ 1393f904a612d9444ab36c07a8e619c113432e046f49vladlosev new ::testing::internal::TestMetaFactory< \ 1394f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \ 1395f904a612d9444ab36c07a8e619c113432e046f49vladlosev return 0; \ 1396f904a612d9444ab36c07a8e619c113432e046f49vladlosev } \ 1397f904a612d9444ab36c07a8e619c113432e046f49vladlosev static int gtest_registering_dummy_; \ 1398f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_DISALLOW_COPY_AND_ASSIGN_(\ 1399f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \ 1400f904a612d9444ab36c07a8e619c113432e046f49vladlosev }; \ 1401f904a612d9444ab36c07a8e619c113432e046f49vladlosev int GTEST_TEST_CLASS_NAME_(test_case_name, \ 1402f904a612d9444ab36c07a8e619c113432e046f49vladlosev test_name)::gtest_registering_dummy_ = \ 1403f904a612d9444ab36c07a8e619c113432e046f49vladlosev GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \ 1404f904a612d9444ab36c07a8e619c113432e046f49vladlosev void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody() 1405f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1406733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \ 1407f904a612d9444ab36c07a8e619c113432e046f49vladlosev ::testing::internal::ParamGenerator<test_case_name::ParamType> \ 1408f904a612d9444ab36c07a8e619c113432e046f49vladlosev gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \ 1409f904a612d9444ab36c07a8e619c113432e046f49vladlosev int gtest_##prefix##test_case_name##_dummy_ = \ 1410f904a612d9444ab36c07a8e619c113432e046f49vladlosev ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \ 1411f904a612d9444ab36c07a8e619c113432e046f49vladlosev GetTestCasePatternHolder<test_case_name>(\ 1412f904a612d9444ab36c07a8e619c113432e046f49vladlosev #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\ 1413f904a612d9444ab36c07a8e619c113432e046f49vladlosev #prefix, \ 1414f904a612d9444ab36c07a8e619c113432e046f49vladlosev >est_##prefix##test_case_name##_EvalGenerator_, \ 1415f904a612d9444ab36c07a8e619c113432e046f49vladlosev __FILE__, __LINE__) 1416f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1417f904a612d9444ab36c07a8e619c113432e046f49vladlosev} // namespace testing 1418f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1419f904a612d9444ab36c07a8e619c113432e046f49vladlosev#endif // GTEST_HAS_PARAM_TEST 1420f904a612d9444ab36c07a8e619c113432e046f49vladlosev 1421f904a612d9444ab36c07a8e619c113432e046f49vladlosev#endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_ 1422