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