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