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