1 // This file was GENERATED by command:
2 // pump.py gtest-param-test.h.pump
3 // DO NOT EDIT BY HAND!!!
5 // Copyright 2008, Google Inc.
6 // All rights reserved.
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions are
12 // * Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 // * Redistributions in binary form must reproduce the above
15 // copyright notice, this list of conditions and the following disclaimer
16 // in the documentation and/or other materials provided with the
18 // * Neither the name of Google Inc. nor the names of its
19 // contributors may be used to endorse or promote products derived from
20 // this software without specific prior written permission.
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 // Authors: vladl@google.com (Vlad Losev)
36 // Macros and functions for implementing parameterized tests
37 // in Google C++ Testing Framework (Google Test)
39 // This file is generated by a SCRIPT. DO NOT EDIT BY HAND!
41 #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
42 #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
45 // Value-parameterized tests allow you to test your code with different
46 // parameters without writing multiple copies of the same test.
48 // Here is how you use value-parameterized tests:
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.
60 class FooTest
: public ::testing::TestWithParam
<const char*> {
61 // You can implement all the usual class fixture members here.
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.
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()));
75 TEST_P(FooTest
, HasBlahBlah
) {
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:
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.
97 // For more details, see comments at the definitions of these functions below
100 // The following statement will instantiate tests from the FooTest test case
101 // each with parameter values "meeny", "miny", and "moe".
103 INSTANTIATE_TEST_CASE_P(InstantiationName
,
105 Values("meeny", "miny", "moe"));
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
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"
121 // You can use these names in --gtest_filter.
123 // This statement will instantiate all tests from FooTest again, each
124 // with parameter values "cat" and "dog":
126 const char* pets
[] = {"cat", "dog"};
127 INSTANTIATE_TEST_CASE_P(AnotherInstantiationName
, FooTest
, ValuesIn(pets
));
129 // The tests from the instantiation above will have these names:
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"
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.
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.
147 // You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc
148 // for more examples.
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.
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:
162 class BaseTest
: public ::testing::Test
{
163 // You can inherit all the usual members for a non-parameterized test
167 class DerivedTest
: public BaseTest
, public ::testing::WithParamInterface
<int> {
168 // The usual test fixture members go here too.
171 TEST_F(BaseTest
, HasFoo
) {
172 // This is an ordinary non-parameterized test.
175 TEST_P(DerivedTest
, DoesBlah
) {
176 // GetParam works just the same here as if you inherit from TestWithParam.
177 EXPECT_TRUE(foo
.Blah(GetParam()));
182 #include "gtest/internal/gtest-port.h"
184 #if !GTEST_OS_SYMBIAN
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 #include "gtest/internal/gtest-param-util-generated.h"
195 #if GTEST_HAS_PARAM_TEST
199 // Functions producing parameter generators.
201 // Google Test uses these generators to produce parameters for value-
202 // parameterized tests. When a parameterized test case is instantiated
203 // with a particular generator, Google Test creates and runs tests
204 // for each element in the sequence produced by the generator.
206 // In the following sample, tests from test case FooTest are instantiated
207 // each three times with parameter values 3, 5, and 8:
209 // class FooTest : public TestWithParam<int> { ... };
211 // TEST_P(FooTest, TestThis) {
213 // TEST_P(FooTest, TestThat) {
215 // INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8));
218 // Range() returns generators providing sequences of values in a range.
222 // - returns a generator producing a sequence of values {start, start+1,
224 // Range(start, end, step)
225 // - returns a generator producing a sequence of values {start, start+step,
226 // start+step+step, ..., }.
228 // * The generated sequences never include end. For example, Range(1, 5)
229 // returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2)
230 // returns a generator producing {1, 3, 5, 7}.
231 // * start and end must have the same type. That type may be any integral or
232 // floating-point type or a user defined type satisfying these conditions:
233 // * It must be assignable (have operator=() defined).
234 // * It must have operator+() (operator+(int-compatible type) for
235 // two-operand version).
236 // * It must have operator<() defined.
237 // Elements in the resulting sequences will also have that type.
238 // * Condition start < end must be satisfied in order for resulting sequences
239 // to contain any elements.
241 template <typename T
, typename IncrementT
>
242 internal::ParamGenerator
<T
> Range(T start
, T end
, IncrementT step
) {
243 return internal::ParamGenerator
<T
>(
244 new internal::RangeGenerator
<T
, IncrementT
>(start
, end
, step
));
247 template <typename T
>
248 internal::ParamGenerator
<T
> Range(T start
, T end
) {
249 return Range(start
, end
, 1);
252 // ValuesIn() function allows generation of tests with parameters coming from
256 // ValuesIn(const T (&array)[N])
257 // - returns a generator producing sequences with elements from
259 // ValuesIn(const Container& container)
260 // - returns a generator producing sequences with elements from
261 // an STL-style container.
262 // ValuesIn(Iterator begin, Iterator end)
263 // - returns a generator producing sequences with elements from
264 // a range [begin, end) defined by a pair of STL-style iterators. These
265 // iterators can also be plain C pointers.
267 // Please note that ValuesIn copies the values from the containers
268 // passed in and keeps them to generate tests in RUN_ALL_TESTS().
272 // This instantiates tests from test case StringTest
273 // each with C-string values of "foo", "bar", and "baz":
275 // const char* strings[] = {"foo", "bar", "baz"};
276 // INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings));
278 // This instantiates tests from test case StlStringTest
279 // each with STL strings with values "a" and "b":
281 // ::std::vector< ::std::string> GetParameterStrings() {
282 // ::std::vector< ::std::string> v;
288 // INSTANTIATE_TEST_CASE_P(CharSequence,
290 // ValuesIn(GetParameterStrings()));
293 // This will also instantiate tests from CharTest
294 // each with parameter values 'a' and 'b':
296 // ::std::list<char> GetParameterChars() {
297 // ::std::list<char> list;
298 // list.push_back('a');
299 // list.push_back('b');
302 // ::std::list<char> l = GetParameterChars();
303 // INSTANTIATE_TEST_CASE_P(CharSequence2,
305 // ValuesIn(l.begin(), l.end()));
307 template <typename ForwardIterator
>
308 internal::ParamGenerator
<
309 typename ::testing::internal::IteratorTraits
<ForwardIterator
>::value_type
>
310 ValuesIn(ForwardIterator begin
, ForwardIterator end
) {
311 typedef typename ::testing::internal::IteratorTraits
<ForwardIterator
>
312 ::value_type ParamType
;
313 return internal::ParamGenerator
<ParamType
>(
314 new internal::ValuesInIteratorRangeGenerator
<ParamType
>(begin
, end
));
317 template <typename T
, size_t N
>
318 internal::ParamGenerator
<T
> ValuesIn(const T (&array
)[N
]) {
319 return ValuesIn(array
, array
+ N
);
322 template <class Container
>
323 internal::ParamGenerator
<typename
Container::value_type
> ValuesIn(
324 const Container
& container
) {
325 return ValuesIn(container
.begin(), container
.end());
328 // Values() allows generating tests from explicitly specified list of
332 // Values(T v1, T v2, ..., T vN)
333 // - returns a generator producing sequences with elements v1, v2, ..., vN.
335 // For example, this instantiates tests from test case BarTest each
336 // with values "one", "two", and "three":
338 // INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three"));
340 // This instantiates tests from test case BazTest each with values 1, 2, 3.5.
341 // The exact type of values will depend on the type of parameter in BazTest.
343 // INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5));
345 // Currently, Values() supports from 1 to 50 parameters.
347 template <typename T1
>
348 internal::ValueArray1
<T1
> Values(T1 v1
) {
349 return internal::ValueArray1
<T1
>(v1
);
352 template <typename T1
, typename T2
>
353 internal::ValueArray2
<T1
, T2
> Values(T1 v1
, T2 v2
) {
354 return internal::ValueArray2
<T1
, T2
>(v1
, v2
);
357 template <typename T1
, typename T2
, typename T3
>
358 internal::ValueArray3
<T1
, T2
, T3
> Values(T1 v1
, T2 v2
, T3 v3
) {
359 return internal::ValueArray3
<T1
, T2
, T3
>(v1
, v2
, v3
);
362 template <typename T1
, typename T2
, typename T3
, typename T4
>
363 internal::ValueArray4
<T1
, T2
, T3
, T4
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
) {
364 return internal::ValueArray4
<T1
, T2
, T3
, T4
>(v1
, v2
, v3
, v4
);
367 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
>
368 internal::ValueArray5
<T1
, T2
, T3
, T4
, T5
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
,
370 return internal::ValueArray5
<T1
, T2
, T3
, T4
, T5
>(v1
, v2
, v3
, v4
, v5
);
373 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
375 internal::ValueArray6
<T1
, T2
, T3
, T4
, T5
, T6
> Values(T1 v1
, T2 v2
, T3 v3
,
376 T4 v4
, T5 v5
, T6 v6
) {
377 return internal::ValueArray6
<T1
, T2
, T3
, T4
, T5
, T6
>(v1
, v2
, v3
, v4
, v5
, v6
);
380 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
381 typename T6
, typename T7
>
382 internal::ValueArray7
<T1
, T2
, T3
, T4
, T5
, T6
, T7
> Values(T1 v1
, T2 v2
, T3 v3
,
383 T4 v4
, T5 v5
, T6 v6
, T7 v7
) {
384 return internal::ValueArray7
<T1
, T2
, T3
, T4
, T5
, T6
, T7
>(v1
, v2
, v3
, v4
, v5
,
388 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
389 typename T6
, typename T7
, typename T8
>
390 internal::ValueArray8
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
> Values(T1 v1
, T2 v2
,
391 T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
) {
392 return internal::ValueArray8
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
>(v1
, v2
, v3
, v4
,
396 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
397 typename T6
, typename T7
, typename T8
, typename T9
>
398 internal::ValueArray9
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
> Values(T1 v1
, T2 v2
,
399 T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
) {
400 return internal::ValueArray9
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
>(v1
, v2
, v3
,
401 v4
, v5
, v6
, v7
, v8
, v9
);
404 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
405 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
>
406 internal::ValueArray10
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
> Values(T1 v1
,
407 T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
) {
408 return internal::ValueArray10
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
>(v1
,
409 v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
);
412 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
413 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
415 internal::ValueArray11
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
,
416 T11
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
418 return internal::ValueArray11
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
,
419 T11
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
);
422 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
423 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
424 typename T11
, typename T12
>
425 internal::ValueArray12
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
426 T12
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
427 T10 v10
, T11 v11
, T12 v12
) {
428 return internal::ValueArray12
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
429 T12
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
);
432 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
433 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
434 typename T11
, typename T12
, typename T13
>
435 internal::ValueArray13
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
,
436 T13
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
437 T10 v10
, T11 v11
, T12 v12
, T13 v13
) {
438 return internal::ValueArray13
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
439 T12
, T13
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
);
442 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
443 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
444 typename T11
, typename T12
, typename T13
, typename T14
>
445 internal::ValueArray14
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
446 T14
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
447 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
) {
448 return internal::ValueArray14
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
449 T12
, T13
, T14
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
,
453 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
454 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
455 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
>
456 internal::ValueArray15
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
457 T14
, T15
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
,
458 T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
) {
459 return internal::ValueArray15
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
460 T12
, T13
, T14
, T15
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
,
464 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
465 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
466 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
468 internal::ValueArray16
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
469 T14
, T15
, T16
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
,
470 T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
,
472 return internal::ValueArray16
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
473 T12
, T13
, T14
, T15
, T16
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
,
474 v12
, v13
, v14
, v15
, v16
);
477 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
478 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
479 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
480 typename T16
, typename T17
>
481 internal::ValueArray17
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
482 T14
, T15
, T16
, T17
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
,
483 T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
,
485 return internal::ValueArray17
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
486 T12
, T13
, T14
, T15
, T16
, T17
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
,
487 v11
, v12
, v13
, v14
, v15
, v16
, v17
);
490 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
491 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
492 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
493 typename T16
, typename T17
, typename T18
>
494 internal::ValueArray18
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
495 T14
, T15
, T16
, T17
, T18
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
,
496 T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
,
497 T16 v16
, T17 v17
, T18 v18
) {
498 return internal::ValueArray18
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
499 T12
, T13
, T14
, T15
, T16
, T17
, T18
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
,
500 v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
);
503 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
504 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
505 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
506 typename T16
, typename T17
, typename T18
, typename T19
>
507 internal::ValueArray19
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
508 T14
, T15
, T16
, T17
, T18
, T19
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
,
509 T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
,
510 T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
) {
511 return internal::ValueArray19
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
512 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
,
513 v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
);
516 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
517 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
518 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
519 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
>
520 internal::ValueArray20
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
521 T14
, T15
, T16
, T17
, T18
, T19
, T20
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
,
522 T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
,
523 T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
) {
524 return internal::ValueArray20
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
525 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
,
526 v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
);
529 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
530 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
531 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
532 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
534 internal::ValueArray21
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
535 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
,
536 T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
,
537 T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
) {
538 return internal::ValueArray21
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
539 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
>(v1
, v2
, v3
, v4
, v5
, v6
,
540 v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
);
543 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
544 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
545 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
546 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
547 typename T21
, typename T22
>
548 internal::ValueArray22
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
549 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
> Values(T1 v1
, T2 v2
, T3 v3
,
550 T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
,
551 T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
,
553 return internal::ValueArray22
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
554 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
>(v1
, v2
, v3
, v4
,
555 v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
,
559 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
560 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
561 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
562 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
563 typename T21
, typename T22
, typename T23
>
564 internal::ValueArray23
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
565 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
> Values(T1 v1
, T2 v2
,
566 T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
,
567 T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
,
568 T21 v21
, T22 v22
, T23 v23
) {
569 return internal::ValueArray23
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
570 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
>(v1
, v2
, v3
,
571 v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
,
575 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
576 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
577 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
578 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
579 typename T21
, typename T22
, typename T23
, typename T24
>
580 internal::ValueArray24
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
581 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
> Values(T1 v1
, T2 v2
,
582 T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
,
583 T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
,
584 T21 v21
, T22 v22
, T23 v23
, T24 v24
) {
585 return internal::ValueArray24
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
586 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
>(v1
, v2
,
587 v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
,
588 v19
, v20
, v21
, v22
, v23
, v24
);
591 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
592 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
593 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
594 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
595 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
>
596 internal::ValueArray25
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
597 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
> Values(T1 v1
,
598 T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
,
599 T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
,
600 T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
) {
601 return internal::ValueArray25
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
602 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
>(v1
,
603 v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
,
604 v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
);
607 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
608 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
609 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
610 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
611 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
613 internal::ValueArray26
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
614 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
615 T26
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
616 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
617 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
619 return internal::ValueArray26
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
620 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
621 T26
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
,
622 v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
, v26
);
625 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
626 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
627 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
628 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
629 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
630 typename T26
, typename T27
>
631 internal::ValueArray27
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
632 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
,
633 T27
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
634 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
635 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
637 return internal::ValueArray27
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
638 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
639 T26
, T27
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
,
640 v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
, v26
, v27
);
643 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
644 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
645 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
646 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
647 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
648 typename T26
, typename T27
, typename T28
>
649 internal::ValueArray28
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
650 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
,
651 T28
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
652 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
653 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
654 T26 v26
, T27 v27
, T28 v28
) {
655 return internal::ValueArray28
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
656 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
657 T26
, T27
, T28
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
,
658 v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
, v26
, v27
,
662 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
663 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
664 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
665 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
666 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
667 typename T26
, typename T27
, typename T28
, typename T29
>
668 internal::ValueArray29
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
669 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
670 T29
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
671 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
672 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
673 T26 v26
, T27 v27
, T28 v28
, T29 v29
) {
674 return internal::ValueArray29
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
675 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
676 T26
, T27
, T28
, T29
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
,
677 v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
, v26
,
681 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
682 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
683 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
684 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
685 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
686 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
>
687 internal::ValueArray30
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
688 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
689 T29
, T30
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
,
690 T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
,
691 T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
,
692 T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
) {
693 return internal::ValueArray30
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
694 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
695 T26
, T27
, T28
, T29
, T30
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
,
696 v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
,
697 v26
, v27
, v28
, v29
, v30
);
700 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
701 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
702 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
703 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
704 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
705 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
707 internal::ValueArray31
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
708 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
709 T29
, T30
, T31
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
,
710 T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
,
711 T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
,
712 T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
) {
713 return internal::ValueArray31
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
714 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
715 T26
, T27
, T28
, T29
, T30
, T31
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
,
716 v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
,
717 v25
, v26
, v27
, v28
, v29
, v30
, v31
);
720 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
721 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
722 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
723 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
724 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
725 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
726 typename T31
, typename T32
>
727 internal::ValueArray32
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
728 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
729 T29
, T30
, T31
, T32
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
,
730 T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
,
731 T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
,
732 T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
,
734 return internal::ValueArray32
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
735 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
736 T26
, T27
, T28
, T29
, T30
, T31
, T32
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
,
737 v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
,
738 v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
);
741 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
742 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
743 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
744 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
745 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
746 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
747 typename T31
, typename T32
, typename T33
>
748 internal::ValueArray33
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
749 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
750 T29
, T30
, T31
, T32
, T33
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
,
751 T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
,
752 T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
,
753 T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
,
755 return internal::ValueArray33
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
756 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
757 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
,
758 v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
,
759 v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
);
762 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
763 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
764 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
765 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
766 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
767 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
768 typename T31
, typename T32
, typename T33
, typename T34
>
769 internal::ValueArray34
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
770 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
771 T29
, T30
, T31
, T32
, T33
, T34
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
,
772 T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
,
773 T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
,
774 T23 v23
, T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
,
775 T31 v31
, T32 v32
, T33 v33
, T34 v34
) {
776 return internal::ValueArray34
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
777 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
778 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
,
779 v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
,
780 v23
, v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
, v34
);
783 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
784 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
785 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
786 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
787 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
788 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
789 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
>
790 internal::ValueArray35
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
791 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
792 T29
, T30
, T31
, T32
, T33
, T34
, T35
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
,
793 T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
,
794 T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
,
795 T22 v22
, T23 v23
, T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
,
796 T30 v30
, T31 v31
, T32 v32
, T33 v33
, T34 v34
, T35 v35
) {
797 return internal::ValueArray35
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
798 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
799 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
>(v1
, v2
, v3
, v4
, v5
, v6
,
800 v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
,
801 v22
, v23
, v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
, v34
, v35
);
804 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
805 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
806 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
807 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
808 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
809 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
810 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
812 internal::ValueArray36
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
813 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
814 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
,
815 T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
,
816 T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
,
817 T22 v22
, T23 v23
, T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
,
818 T30 v30
, T31 v31
, T32 v32
, T33 v33
, T34 v34
, T35 v35
, T36 v36
) {
819 return internal::ValueArray36
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
820 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
821 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
>(v1
, v2
, v3
, v4
,
822 v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
,
823 v20
, v21
, v22
, v23
, v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
,
827 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
828 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
829 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
830 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
831 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
832 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
833 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
834 typename T36
, typename T37
>
835 internal::ValueArray37
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
836 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
837 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
> Values(T1 v1
, T2 v2
, T3 v3
,
838 T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
,
839 T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
,
840 T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
,
841 T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
, T34 v34
, T35 v35
, T36 v36
,
843 return internal::ValueArray37
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
844 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
845 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
>(v1
, v2
, v3
,
846 v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
,
847 v20
, v21
, v22
, v23
, v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
,
851 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
852 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
853 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
854 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
855 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
856 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
857 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
858 typename T36
, typename T37
, typename T38
>
859 internal::ValueArray38
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
860 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
861 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
> Values(T1 v1
, T2 v2
,
862 T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
,
863 T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
,
864 T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
,
865 T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
, T34 v34
, T35 v35
, T36 v36
,
867 return internal::ValueArray38
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
868 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
869 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
>(v1
, v2
,
870 v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
,
871 v19
, v20
, v21
, v22
, v23
, v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
,
872 v33
, v34
, v35
, v36
, v37
, v38
);
875 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
876 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
877 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
878 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
879 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
880 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
881 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
882 typename T36
, typename T37
, typename T38
, typename T39
>
883 internal::ValueArray39
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
884 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
885 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
> Values(T1 v1
, T2 v2
,
886 T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
,
887 T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
,
888 T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
,
889 T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
, T34 v34
, T35 v35
, T36 v36
,
890 T37 v37
, T38 v38
, T39 v39
) {
891 return internal::ValueArray39
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
892 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
893 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
>(v1
,
894 v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
,
895 v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
,
896 v32
, v33
, v34
, v35
, v36
, v37
, v38
, v39
);
899 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
900 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
901 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
902 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
903 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
904 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
905 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
906 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
>
907 internal::ValueArray40
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
908 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
909 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
> Values(T1 v1
,
910 T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
,
911 T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
,
912 T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
, T26 v26
, T27 v27
,
913 T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
, T34 v34
, T35 v35
,
914 T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
) {
915 return internal::ValueArray40
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
916 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
917 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
918 T40
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
,
919 v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
, v26
, v27
, v28
, v29
,
920 v30
, v31
, v32
, v33
, v34
, v35
, v36
, v37
, v38
, v39
, v40
);
923 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
924 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
925 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
926 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
927 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
928 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
929 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
930 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
932 internal::ValueArray41
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
933 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
934 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
,
935 T41
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
936 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
937 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
938 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
939 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
) {
940 return internal::ValueArray41
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
941 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
942 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
943 T40
, T41
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
,
944 v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
, v26
, v27
, v28
,
945 v29
, v30
, v31
, v32
, v33
, v34
, v35
, v36
, v37
, v38
, v39
, v40
, v41
);
948 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
949 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
950 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
951 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
952 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
953 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
954 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
955 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
956 typename T41
, typename T42
>
957 internal::ValueArray42
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
958 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
959 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
, T41
,
960 T42
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
961 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
962 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
963 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
964 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
966 return internal::ValueArray42
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
967 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
968 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
969 T40
, T41
, T42
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
,
970 v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
, v26
, v27
,
971 v28
, v29
, v30
, v31
, v32
, v33
, v34
, v35
, v36
, v37
, v38
, v39
, v40
, v41
,
975 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
976 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
977 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
978 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
979 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
980 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
981 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
982 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
983 typename T41
, typename T42
, typename T43
>
984 internal::ValueArray43
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
985 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
986 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
, T41
, T42
,
987 T43
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
988 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
989 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
990 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
991 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
993 return internal::ValueArray43
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
994 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
995 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
996 T40
, T41
, T42
, T43
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
,
997 v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
, v26
,
998 v27
, v28
, v29
, v30
, v31
, v32
, v33
, v34
, v35
, v36
, v37
, v38
, v39
, v40
,
1002 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1003 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1004 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1005 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1006 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1007 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1008 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1009 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
1010 typename T41
, typename T42
, typename T43
, typename T44
>
1011 internal::ValueArray44
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
1012 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
1013 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
, T41
, T42
, T43
,
1014 T44
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
,
1015 T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
, T17 v17
,
1016 T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
, T25 v25
,
1017 T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
, T33 v33
,
1018 T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
, T41 v41
,
1019 T42 v42
, T43 v43
, T44 v44
) {
1020 return internal::ValueArray44
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
1021 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
1022 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
1023 T40
, T41
, T42
, T43
, T44
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
, v11
,
1024 v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
, v25
,
1025 v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
, v34
, v35
, v36
, v37
, v38
, v39
,
1026 v40
, v41
, v42
, v43
, v44
);
1029 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1030 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1031 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1032 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1033 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1034 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1035 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1036 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
1037 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
>
1038 internal::ValueArray45
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
1039 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
1040 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
, T41
, T42
, T43
,
1041 T44
, T45
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
, T8 v8
,
1042 T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
, T16 v16
,
1043 T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
, T24 v24
,
1044 T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
, T32 v32
,
1045 T33 v33
, T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
, T40 v40
,
1046 T41 v41
, T42 v42
, T43 v43
, T44 v44
, T45 v45
) {
1047 return internal::ValueArray45
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
1048 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
1049 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
1050 T40
, T41
, T42
, T43
, T44
, T45
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
, v10
,
1051 v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
, v24
,
1052 v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
, v34
, v35
, v36
, v37
, v38
,
1053 v39
, v40
, v41
, v42
, v43
, v44
, v45
);
1056 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1057 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1058 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1059 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1060 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1061 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1062 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1063 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
1064 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
,
1066 internal::ValueArray46
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
1067 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
1068 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
, T41
, T42
, T43
,
1069 T44
, T45
, T46
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
,
1070 T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
,
1071 T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
,
1072 T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
,
1073 T32 v32
, T33 v33
, T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
,
1074 T40 v40
, T41 v41
, T42 v42
, T43 v43
, T44 v44
, T45 v45
, T46 v46
) {
1075 return internal::ValueArray46
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
1076 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
1077 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
1078 T40
, T41
, T42
, T43
, T44
, T45
, T46
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
, v9
,
1079 v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
,
1080 v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
, v34
, v35
, v36
, v37
,
1081 v38
, v39
, v40
, v41
, v42
, v43
, v44
, v45
, v46
);
1084 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1085 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1086 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1087 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1088 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1089 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1090 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1091 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
1092 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
,
1093 typename T46
, typename T47
>
1094 internal::ValueArray47
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
1095 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
1096 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
, T41
, T42
, T43
,
1097 T44
, T45
, T46
, T47
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
, T7 v7
,
1098 T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
,
1099 T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
,
1100 T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
,
1101 T32 v32
, T33 v33
, T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
,
1102 T40 v40
, T41 v41
, T42 v42
, T43 v43
, T44 v44
, T45 v45
, T46 v46
, T47 v47
) {
1103 return internal::ValueArray47
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
1104 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
1105 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
1106 T40
, T41
, T42
, T43
, T44
, T45
, T46
, T47
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
, v8
,
1107 v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
, v23
,
1108 v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
, v34
, v35
, v36
, v37
,
1109 v38
, v39
, v40
, v41
, v42
, v43
, v44
, v45
, v46
, v47
);
1112 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1113 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1114 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1115 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1116 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1117 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1118 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1119 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
1120 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
,
1121 typename T46
, typename T47
, typename T48
>
1122 internal::ValueArray48
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
1123 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
1124 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
, T41
, T42
, T43
,
1125 T44
, T45
, T46
, T47
, T48
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
, T6 v6
,
1126 T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
, T15 v15
,
1127 T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
, T23 v23
,
1128 T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
, T31 v31
,
1129 T32 v32
, T33 v33
, T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
, T39 v39
,
1130 T40 v40
, T41 v41
, T42 v42
, T43 v43
, T44 v44
, T45 v45
, T46 v46
, T47 v47
,
1132 return internal::ValueArray48
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
1133 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
1134 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
1135 T40
, T41
, T42
, T43
, T44
, T45
, T46
, T47
, T48
>(v1
, v2
, v3
, v4
, v5
, v6
, v7
,
1136 v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
, v22
,
1137 v23
, v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
, v34
, v35
, v36
,
1138 v37
, v38
, v39
, v40
, v41
, v42
, v43
, v44
, v45
, v46
, v47
, v48
);
1141 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1142 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1143 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1144 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1145 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1146 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1147 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1148 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
1149 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
,
1150 typename T46
, typename T47
, typename T48
, typename T49
>
1151 internal::ValueArray49
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
1152 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
1153 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
, T41
, T42
, T43
,
1154 T44
, T45
, T46
, T47
, T48
, T49
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
, T5 v5
,
1155 T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
, T14 v14
,
1156 T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
, T22 v22
,
1157 T23 v23
, T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
, T30 v30
,
1158 T31 v31
, T32 v32
, T33 v33
, T34 v34
, T35 v35
, T36 v36
, T37 v37
, T38 v38
,
1159 T39 v39
, T40 v40
, T41 v41
, T42 v42
, T43 v43
, T44 v44
, T45 v45
, T46 v46
,
1160 T47 v47
, T48 v48
, T49 v49
) {
1161 return internal::ValueArray49
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
1162 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
1163 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
1164 T40
, T41
, T42
, T43
, T44
, T45
, T46
, T47
, T48
, T49
>(v1
, v2
, v3
, v4
, v5
, v6
,
1165 v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
, v20
, v21
,
1166 v22
, v23
, v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
, v34
, v35
,
1167 v36
, v37
, v38
, v39
, v40
, v41
, v42
, v43
, v44
, v45
, v46
, v47
, v48
, v49
);
1170 template <typename T1
, typename T2
, typename T3
, typename T4
, typename T5
,
1171 typename T6
, typename T7
, typename T8
, typename T9
, typename T10
,
1172 typename T11
, typename T12
, typename T13
, typename T14
, typename T15
,
1173 typename T16
, typename T17
, typename T18
, typename T19
, typename T20
,
1174 typename T21
, typename T22
, typename T23
, typename T24
, typename T25
,
1175 typename T26
, typename T27
, typename T28
, typename T29
, typename T30
,
1176 typename T31
, typename T32
, typename T33
, typename T34
, typename T35
,
1177 typename T36
, typename T37
, typename T38
, typename T39
, typename T40
,
1178 typename T41
, typename T42
, typename T43
, typename T44
, typename T45
,
1179 typename T46
, typename T47
, typename T48
, typename T49
, typename T50
>
1180 internal::ValueArray50
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
, T12
, T13
,
1181 T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
, T26
, T27
, T28
,
1182 T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
, T40
, T41
, T42
, T43
,
1183 T44
, T45
, T46
, T47
, T48
, T49
, T50
> Values(T1 v1
, T2 v2
, T3 v3
, T4 v4
,
1184 T5 v5
, T6 v6
, T7 v7
, T8 v8
, T9 v9
, T10 v10
, T11 v11
, T12 v12
, T13 v13
,
1185 T14 v14
, T15 v15
, T16 v16
, T17 v17
, T18 v18
, T19 v19
, T20 v20
, T21 v21
,
1186 T22 v22
, T23 v23
, T24 v24
, T25 v25
, T26 v26
, T27 v27
, T28 v28
, T29 v29
,
1187 T30 v30
, T31 v31
, T32 v32
, T33 v33
, T34 v34
, T35 v35
, T36 v36
, T37 v37
,
1188 T38 v38
, T39 v39
, T40 v40
, T41 v41
, T42 v42
, T43 v43
, T44 v44
, T45 v45
,
1189 T46 v46
, T47 v47
, T48 v48
, T49 v49
, T50 v50
) {
1190 return internal::ValueArray50
<T1
, T2
, T3
, T4
, T5
, T6
, T7
, T8
, T9
, T10
, T11
,
1191 T12
, T13
, T14
, T15
, T16
, T17
, T18
, T19
, T20
, T21
, T22
, T23
, T24
, T25
,
1192 T26
, T27
, T28
, T29
, T30
, T31
, T32
, T33
, T34
, T35
, T36
, T37
, T38
, T39
,
1193 T40
, T41
, T42
, T43
, T44
, T45
, T46
, T47
, T48
, T49
, T50
>(v1
, v2
, v3
, v4
,
1194 v5
, v6
, v7
, v8
, v9
, v10
, v11
, v12
, v13
, v14
, v15
, v16
, v17
, v18
, v19
,
1195 v20
, v21
, v22
, v23
, v24
, v25
, v26
, v27
, v28
, v29
, v30
, v31
, v32
, v33
,
1196 v34
, v35
, v36
, v37
, v38
, v39
, v40
, v41
, v42
, v43
, v44
, v45
, v46
, v47
,
1200 // Bool() allows generating tests with parameters in a set of (false, true).
1204 // - returns a generator producing sequences with elements {false, true}.
1206 // It is useful when testing code that depends on Boolean flags. Combinations
1207 // of multiple flags can be tested when several Bool()'s are combined using
1208 // Combine() function.
1210 // In the following example all tests in the test case FlagDependentTest
1211 // will be instantiated twice with parameters false and true.
1213 // class FlagDependentTest : public testing::TestWithParam<bool> {
1214 // virtual void SetUp() {
1215 // external_flag = GetParam();
1218 // INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool());
1220 inline internal::ParamGenerator
<bool> Bool() {
1221 return Values(false, true);
1224 # if GTEST_HAS_COMBINE
1225 // Combine() allows the user to combine two or more sequences to produce
1226 // values of a Cartesian product of those sequences' elements.
1229 // Combine(gen1, gen2, ..., genN)
1230 // - returns a generator producing sequences with elements coming from
1231 // the Cartesian product of elements from the sequences generated by
1232 // gen1, gen2, ..., genN. The sequence elements will have a type of
1233 // tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types
1234 // of elements from sequences produces by gen1, gen2, ..., genN.
1236 // Combine can have up to 10 arguments. This number is currently limited
1237 // by the maximum number of elements in the tuple implementation used by Google
1242 // This will instantiate tests in test case AnimalTest each one with
1243 // the parameter values tuple("cat", BLACK), tuple("cat", WHITE),
1244 // tuple("dog", BLACK), and tuple("dog", WHITE):
1246 // enum Color { BLACK, GRAY, WHITE };
1248 // : public testing::TestWithParam<tuple<const char*, Color> > {...};
1250 // TEST_P(AnimalTest, AnimalLooksNice) {...}
1252 // INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest,
1253 // Combine(Values("cat", "dog"),
1254 // Values(BLACK, WHITE)));
1256 // This will instantiate tests in FlagDependentTest with all variations of two
1259 // class FlagDependentTest
1260 // : public testing::TestWithParam<tuple<bool, bool> > {
1261 // virtual void SetUp() {
1262 // // Assigns external_flag_1 and external_flag_2 values from the tuple.
1263 // tie(external_flag_1, external_flag_2) = GetParam();
1267 // TEST_P(FlagDependentTest, TestFeature1) {
1268 // // Test your code using external_flag_1 and external_flag_2 here.
1270 // INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest,
1271 // Combine(Bool(), Bool()));
1273 template <typename Generator1
, typename Generator2
>
1274 internal::CartesianProductHolder2
<Generator1
, Generator2
> Combine(
1275 const Generator1
& g1
, const Generator2
& g2
) {
1276 return internal::CartesianProductHolder2
<Generator1
, Generator2
>(
1280 template <typename Generator1
, typename Generator2
, typename Generator3
>
1281 internal::CartesianProductHolder3
<Generator1
, Generator2
, Generator3
> Combine(
1282 const Generator1
& g1
, const Generator2
& g2
, const Generator3
& g3
) {
1283 return internal::CartesianProductHolder3
<Generator1
, Generator2
, Generator3
>(
1287 template <typename Generator1
, typename Generator2
, typename Generator3
,
1288 typename Generator4
>
1289 internal::CartesianProductHolder4
<Generator1
, Generator2
, Generator3
,
1290 Generator4
> Combine(
1291 const Generator1
& g1
, const Generator2
& g2
, const Generator3
& g3
,
1292 const Generator4
& g4
) {
1293 return internal::CartesianProductHolder4
<Generator1
, Generator2
, Generator3
,
1298 template <typename Generator1
, typename Generator2
, typename Generator3
,
1299 typename Generator4
, typename Generator5
>
1300 internal::CartesianProductHolder5
<Generator1
, Generator2
, Generator3
,
1301 Generator4
, Generator5
> Combine(
1302 const Generator1
& g1
, const Generator2
& g2
, const Generator3
& g3
,
1303 const Generator4
& g4
, const Generator5
& g5
) {
1304 return internal::CartesianProductHolder5
<Generator1
, Generator2
, Generator3
,
1305 Generator4
, Generator5
>(
1306 g1
, g2
, g3
, g4
, g5
);
1309 template <typename Generator1
, typename Generator2
, typename Generator3
,
1310 typename Generator4
, typename Generator5
, typename Generator6
>
1311 internal::CartesianProductHolder6
<Generator1
, Generator2
, Generator3
,
1312 Generator4
, Generator5
, Generator6
> Combine(
1313 const Generator1
& g1
, const Generator2
& g2
, const Generator3
& g3
,
1314 const Generator4
& g4
, const Generator5
& g5
, const Generator6
& g6
) {
1315 return internal::CartesianProductHolder6
<Generator1
, Generator2
, Generator3
,
1316 Generator4
, Generator5
, Generator6
>(
1317 g1
, g2
, g3
, g4
, g5
, g6
);
1320 template <typename Generator1
, typename Generator2
, typename Generator3
,
1321 typename Generator4
, typename Generator5
, typename Generator6
,
1322 typename Generator7
>
1323 internal::CartesianProductHolder7
<Generator1
, Generator2
, Generator3
,
1324 Generator4
, Generator5
, Generator6
, Generator7
> Combine(
1325 const Generator1
& g1
, const Generator2
& g2
, const Generator3
& g3
,
1326 const Generator4
& g4
, const Generator5
& g5
, const Generator6
& g6
,
1327 const Generator7
& g7
) {
1328 return internal::CartesianProductHolder7
<Generator1
, Generator2
, Generator3
,
1329 Generator4
, Generator5
, Generator6
, Generator7
>(
1330 g1
, g2
, g3
, g4
, g5
, g6
, g7
);
1333 template <typename Generator1
, typename Generator2
, typename Generator3
,
1334 typename Generator4
, typename Generator5
, typename Generator6
,
1335 typename Generator7
, typename Generator8
>
1336 internal::CartesianProductHolder8
<Generator1
, Generator2
, Generator3
,
1337 Generator4
, Generator5
, Generator6
, Generator7
, Generator8
> Combine(
1338 const Generator1
& g1
, const Generator2
& g2
, const Generator3
& g3
,
1339 const Generator4
& g4
, const Generator5
& g5
, const Generator6
& g6
,
1340 const Generator7
& g7
, const Generator8
& g8
) {
1341 return internal::CartesianProductHolder8
<Generator1
, Generator2
, Generator3
,
1342 Generator4
, Generator5
, Generator6
, Generator7
, Generator8
>(
1343 g1
, g2
, g3
, g4
, g5
, g6
, g7
, g8
);
1346 template <typename Generator1
, typename Generator2
, typename Generator3
,
1347 typename Generator4
, typename Generator5
, typename Generator6
,
1348 typename Generator7
, typename Generator8
, typename Generator9
>
1349 internal::CartesianProductHolder9
<Generator1
, Generator2
, Generator3
,
1350 Generator4
, Generator5
, Generator6
, Generator7
, Generator8
,
1351 Generator9
> Combine(
1352 const Generator1
& g1
, const Generator2
& g2
, const Generator3
& g3
,
1353 const Generator4
& g4
, const Generator5
& g5
, const Generator6
& g6
,
1354 const Generator7
& g7
, const Generator8
& g8
, const Generator9
& g9
) {
1355 return internal::CartesianProductHolder9
<Generator1
, Generator2
, Generator3
,
1356 Generator4
, Generator5
, Generator6
, Generator7
, Generator8
, Generator9
>(
1357 g1
, g2
, g3
, g4
, g5
, g6
, g7
, g8
, g9
);
1360 template <typename Generator1
, typename Generator2
, typename Generator3
,
1361 typename Generator4
, typename Generator5
, typename Generator6
,
1362 typename Generator7
, typename Generator8
, typename Generator9
,
1363 typename Generator10
>
1364 internal::CartesianProductHolder10
<Generator1
, Generator2
, Generator3
,
1365 Generator4
, Generator5
, Generator6
, Generator7
, Generator8
, Generator9
,
1366 Generator10
> Combine(
1367 const Generator1
& g1
, const Generator2
& g2
, const Generator3
& g3
,
1368 const Generator4
& g4
, const Generator5
& g5
, const Generator6
& g6
,
1369 const Generator7
& g7
, const Generator8
& g8
, const Generator9
& g9
,
1370 const Generator10
& g10
) {
1371 return internal::CartesianProductHolder10
<Generator1
, Generator2
, Generator3
,
1372 Generator4
, Generator5
, Generator6
, Generator7
, Generator8
, Generator9
,
1374 g1
, g2
, g3
, g4
, g5
, g6
, g7
, g8
, g9
, g10
);
1376 # endif // GTEST_HAS_COMBINE
1380 # define TEST_P(test_case_name, test_name) \
1381 class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
1382 : public test_case_name { \
1384 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \
1385 virtual void TestBody(); \
1387 static int AddToRegistry() { \
1388 ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
1389 GetTestCasePatternHolder<test_case_name>(\
1391 ::testing::internal::CodeLocation(\
1392 __FILE__, __LINE__))->AddTestPattern(\
1395 new ::testing::internal::TestMetaFactory< \
1396 GTEST_TEST_CLASS_NAME_(\
1397 test_case_name, test_name)>()); \
1400 static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
1401 GTEST_DISALLOW_COPY_AND_ASSIGN_(\
1402 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \
1404 int GTEST_TEST_CLASS_NAME_(test_case_name, \
1405 test_name)::gtest_registering_dummy_ = \
1406 GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
1407 void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
1409 // The optional last argument to INSTANTIATE_TEST_CASE_P allows the user
1410 // to specify a function or functor that generates custom test name suffixes
1411 // based on the test parameters. The function should accept one argument of
1412 // type testing::TestParamInfo<class ParamType>, and return std::string.
1414 // testing::PrintToStringParamName is a builtin test suffix generator that
1415 // returns the value of testing::PrintToString(GetParam()). It does not work
1416 // for std::string or C strings.
1418 // Note: test names must be non-empty, unique, and may only contain ASCII
1419 // alphanumeric characters or underscore.
1421 # define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
1422 ::testing::internal::ParamGenerator<test_case_name::ParamType> \
1423 gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
1424 ::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \
1425 const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \
1426 return ::testing::internal::GetParamNameGen<test_case_name::ParamType> \
1427 (__VA_ARGS__)(info); \
1429 int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \
1430 ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
1431 GetTestCasePatternHolder<test_case_name>(\
1433 ::testing::internal::CodeLocation(\
1434 __FILE__, __LINE__))->AddTestCaseInstantiation(\
1436 >est_##prefix##test_case_name##_EvalGenerator_, \
1437 >est_##prefix##test_case_name##_EvalGenerateName_, \
1440 } // namespace testing
1442 #endif // GTEST_HAS_PARAM_TEST
1444 #endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_