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