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


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Tue Jan 19 2021 03:06:12