Blame googletest/include/gtest/gtest-param-test.h

Packit bd1cd8
// This file was GENERATED by command:
Packit bd1cd8
//     pump.py gtest-param-test.h.pump
Packit bd1cd8
// DO NOT EDIT BY HAND!!!
Packit bd1cd8
Packit bd1cd8
// Copyright 2008, Google Inc.
Packit bd1cd8
// All rights reserved.
Packit bd1cd8
//
Packit bd1cd8
// Redistribution and use in source and binary forms, with or without
Packit bd1cd8
// modification, are permitted provided that the following conditions are
Packit bd1cd8
// met:
Packit bd1cd8
//
Packit bd1cd8
//     * Redistributions of source code must retain the above copyright
Packit bd1cd8
// notice, this list of conditions and the following disclaimer.
Packit bd1cd8
//     * Redistributions in binary form must reproduce the above
Packit bd1cd8
// copyright notice, this list of conditions and the following disclaimer
Packit bd1cd8
// in the documentation and/or other materials provided with the
Packit bd1cd8
// distribution.
Packit bd1cd8
//     * Neither the name of Google Inc. nor the names of its
Packit bd1cd8
// contributors may be used to endorse or promote products derived from
Packit bd1cd8
// this software without specific prior written permission.
Packit bd1cd8
//
Packit bd1cd8
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit bd1cd8
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit bd1cd8
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Packit bd1cd8
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit bd1cd8
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Packit bd1cd8
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Packit bd1cd8
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit bd1cd8
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit bd1cd8
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit bd1cd8
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit bd1cd8
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit bd1cd8
//
Packit bd1cd8
// Authors: vladl@google.com (Vlad Losev)
Packit bd1cd8
//
Packit bd1cd8
// Macros and functions for implementing parameterized tests
Packit bd1cd8
// in Google C++ Testing Framework (Google Test)
Packit bd1cd8
//
Packit bd1cd8
// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
Packit bd1cd8
//
Packit bd1cd8
#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
Packit bd1cd8
#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
Packit bd1cd8
Packit bd1cd8
Packit bd1cd8
// Value-parameterized tests allow you to test your code with different
Packit bd1cd8
// parameters without writing multiple copies of the same test.
Packit bd1cd8
//
Packit bd1cd8
// Here is how you use value-parameterized tests:
Packit bd1cd8
Packit bd1cd8
#if 0
Packit bd1cd8
Packit bd1cd8
// To write value-parameterized tests, first you should define a fixture
Packit bd1cd8
// class. It is usually derived from testing::TestWithParam<T> (see below for
Packit bd1cd8
// another inheritance scheme that's sometimes useful in more complicated
Packit bd1cd8
// class hierarchies), where the type of your parameter values.
Packit bd1cd8
// TestWithParam<T> is itself derived from testing::Test. T can be any
Packit bd1cd8
// copyable type. If it's a raw pointer, you are responsible for managing the
Packit bd1cd8
// lifespan of the pointed values.
Packit bd1cd8
Packit bd1cd8
class FooTest : public ::testing::TestWithParam<const char*> {
Packit bd1cd8
  // You can implement all the usual class fixture members here.
Packit bd1cd8
};
Packit bd1cd8
Packit bd1cd8
// Then, use the TEST_P macro to define as many parameterized tests
Packit bd1cd8
// for this fixture as you want. The _P suffix is for "parameterized"
Packit bd1cd8
// or "pattern", whichever you prefer to think.
Packit bd1cd8
Packit bd1cd8
TEST_P(FooTest, DoesBlah) {
Packit bd1cd8
  // Inside a test, access the test parameter with the GetParam() method
Packit bd1cd8
  // of the TestWithParam<T> class:
Packit bd1cd8
  EXPECT_TRUE(foo.Blah(GetParam()));
Packit bd1cd8
  ...
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
TEST_P(FooTest, HasBlahBlah) {
Packit bd1cd8
  ...
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test
Packit bd1cd8
// case with any set of parameters you want. Google Test defines a number
Packit bd1cd8
// of functions for generating test parameters. They return what we call
Packit bd1cd8
// (surprise!) parameter generators. Here is a  summary of them, which
Packit bd1cd8
// are all in the testing namespace:
Packit bd1cd8
//
Packit bd1cd8
//
Packit bd1cd8
//  Range(begin, end [, step]) - Yields values {begin, begin+step,
Packit bd1cd8
//                               begin+step+step, ...}. The values do not
Packit bd1cd8
//                               include end. step defaults to 1.
Packit bd1cd8
//  Values(v1, v2, ..., vN)    - Yields values {v1, v2, ..., vN}.
Packit bd1cd8
//  ValuesIn(container)        - Yields values from a C-style array, an STL
Packit bd1cd8
//  ValuesIn(begin,end)          container, or an iterator range [begin, end).
Packit bd1cd8
//  Bool()                     - Yields sequence {false, true}.
Packit bd1cd8
//  Combine(g1, g2, ..., gN)   - Yields all combinations (the Cartesian product
Packit bd1cd8
//                               for the math savvy) of the values generated
Packit bd1cd8
//                               by the N generators.
Packit bd1cd8
//
Packit bd1cd8
// For more details, see comments at the definitions of these functions below
Packit bd1cd8
// in this file.
Packit bd1cd8
//
Packit bd1cd8
// The following statement will instantiate tests from the FooTest test case
Packit bd1cd8
// each with parameter values "meeny", "miny", and "moe".
Packit bd1cd8
Packit bd1cd8
INSTANTIATE_TEST_CASE_P(InstantiationName,
Packit bd1cd8
                        FooTest,
Packit bd1cd8
                        Values("meeny", "miny", "moe"));
Packit bd1cd8
Packit bd1cd8
// To distinguish different instances of the pattern, (yes, you
Packit bd1cd8
// can instantiate it more then once) the first argument to the
Packit bd1cd8
// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the
Packit bd1cd8
// actual test case name. Remember to pick unique prefixes for different
Packit bd1cd8
// instantiations. The tests from the instantiation above will have
Packit bd1cd8
// these names:
Packit bd1cd8
//
Packit bd1cd8
//    * InstantiationName/FooTest.DoesBlah/0 for "meeny"
Packit bd1cd8
//    * InstantiationName/FooTest.DoesBlah/1 for "miny"
Packit bd1cd8
//    * InstantiationName/FooTest.DoesBlah/2 for "moe"
Packit bd1cd8
//    * InstantiationName/FooTest.HasBlahBlah/0 for "meeny"
Packit bd1cd8
//    * InstantiationName/FooTest.HasBlahBlah/1 for "miny"
Packit bd1cd8
//    * InstantiationName/FooTest.HasBlahBlah/2 for "moe"
Packit bd1cd8
//
Packit bd1cd8
// You can use these names in --gtest_filter.
Packit bd1cd8
//
Packit bd1cd8
// This statement will instantiate all tests from FooTest again, each
Packit bd1cd8
// with parameter values "cat" and "dog":
Packit bd1cd8
Packit bd1cd8
const char* pets[] = {"cat", "dog"};
Packit bd1cd8
INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets));
Packit bd1cd8
Packit bd1cd8
// The tests from the instantiation above will have these names:
Packit bd1cd8
//
Packit bd1cd8
//    * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat"
Packit bd1cd8
//    * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog"
Packit bd1cd8
//    * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat"
Packit bd1cd8
//    * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog"
Packit bd1cd8
//
Packit bd1cd8
// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests
Packit bd1cd8
// in the given test case, whether their definitions come before or
Packit bd1cd8
// AFTER the INSTANTIATE_TEST_CASE_P statement.
Packit bd1cd8
//
Packit bd1cd8
// Please also note that generator expressions (including parameters to the
Packit bd1cd8
// generators) are evaluated in InitGoogleTest(), after main() has started.
Packit bd1cd8
// This allows the user on one hand, to adjust generator parameters in order
Packit bd1cd8
// to dynamically determine a set of tests to run and on the other hand,
Packit bd1cd8
// give the user a chance to inspect the generated tests with Google Test
Packit bd1cd8
// reflection API before RUN_ALL_TESTS() is executed.
Packit bd1cd8
//
Packit bd1cd8
// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc
Packit bd1cd8
// for more examples.
Packit bd1cd8
//
Packit bd1cd8
// In the future, we plan to publish the API for defining new parameter
Packit bd1cd8
// generators. But for now this interface remains part of the internal
Packit bd1cd8
// implementation and is subject to change.
Packit bd1cd8
//
Packit bd1cd8
//
Packit bd1cd8
// A parameterized test fixture must be derived from testing::Test and from
Packit bd1cd8
// testing::WithParamInterface<T>, where T is the type of the parameter
Packit bd1cd8
// values. Inheriting from TestWithParam<T> satisfies that requirement because
Packit bd1cd8
// TestWithParam<T> inherits from both Test and WithParamInterface. In more
Packit bd1cd8
// complicated hierarchies, however, it is occasionally useful to inherit
Packit bd1cd8
// separately from Test and WithParamInterface. For example:
Packit bd1cd8
Packit bd1cd8
class BaseTest : public ::testing::Test {
Packit bd1cd8
  // You can inherit all the usual members for a non-parameterized test
Packit bd1cd8
  // fixture here.
Packit bd1cd8
};
Packit bd1cd8
Packit bd1cd8
class DerivedTest : public BaseTest, public ::testing::WithParamInterface<int> {
Packit bd1cd8
  // The usual test fixture members go here too.
Packit bd1cd8
};
Packit bd1cd8
Packit bd1cd8
TEST_F(BaseTest, HasFoo) {
Packit bd1cd8
  // This is an ordinary non-parameterized test.
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
TEST_P(DerivedTest, DoesBlah) {
Packit bd1cd8
  // GetParam works just the same here as if you inherit from TestWithParam.
Packit bd1cd8
  EXPECT_TRUE(foo.Blah(GetParam()));
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
#endif  // 0
Packit bd1cd8
Packit bd1cd8
#include "gtest/internal/gtest-port.h"
Packit bd1cd8
Packit bd1cd8
#if !GTEST_OS_SYMBIAN
Packit bd1cd8
# include <utility>
Packit bd1cd8
#endif
Packit bd1cd8
Packit bd1cd8
// scripts/fuse_gtest.py depends on gtest's own header being #included
Packit bd1cd8
// *unconditionally*.  Therefore these #includes cannot be moved
Packit bd1cd8
// inside #if GTEST_HAS_PARAM_TEST.
Packit bd1cd8
#include "gtest/internal/gtest-internal.h"
Packit bd1cd8
#include "gtest/internal/gtest-param-util.h"
Packit bd1cd8
#include "gtest/internal/gtest-param-util-generated.h"
Packit bd1cd8
Packit bd1cd8
#if GTEST_HAS_PARAM_TEST
Packit bd1cd8
Packit bd1cd8
namespace testing {
Packit bd1cd8
Packit bd1cd8
// Functions producing parameter generators.
Packit bd1cd8
//
Packit bd1cd8
// Google Test uses these generators to produce parameters for value-
Packit bd1cd8
// parameterized tests. When a parameterized test case is instantiated
Packit bd1cd8
// with a particular generator, Google Test creates and runs tests
Packit bd1cd8
// for each element in the sequence produced by the generator.
Packit bd1cd8
//
Packit bd1cd8
// In the following sample, tests from test case FooTest are instantiated
Packit bd1cd8
// each three times with parameter values 3, 5, and 8:
Packit bd1cd8
//
Packit bd1cd8
// class FooTest : public TestWithParam<int> { ... };
Packit bd1cd8
//
Packit bd1cd8
// TEST_P(FooTest, TestThis) {
Packit bd1cd8
// }
Packit bd1cd8
// TEST_P(FooTest, TestThat) {
Packit bd1cd8
// }
Packit bd1cd8
// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8));
Packit bd1cd8
//
Packit bd1cd8
Packit bd1cd8
// Range() returns generators providing sequences of values in a range.
Packit bd1cd8
//
Packit bd1cd8
// Synopsis:
Packit bd1cd8
// Range(start, end)
Packit bd1cd8
//   - returns a generator producing a sequence of values {start, start+1,
Packit bd1cd8
//     start+2, ..., }.
Packit bd1cd8
// Range(start, end, step)
Packit bd1cd8
//   - returns a generator producing a sequence of values {start, start+step,
Packit bd1cd8
//     start+step+step, ..., }.
Packit bd1cd8
// Notes:
Packit bd1cd8
//   * The generated sequences never include end. For example, Range(1, 5)
Packit bd1cd8
//     returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2)
Packit bd1cd8
//     returns a generator producing {1, 3, 5, 7}.
Packit bd1cd8
//   * start and end must have the same type. That type may be any integral or
Packit bd1cd8
//     floating-point type or a user defined type satisfying these conditions:
Packit bd1cd8
//     * It must be assignable (have operator=() defined).
Packit bd1cd8
//     * It must have operator+() (operator+(int-compatible type) for
Packit bd1cd8
//       two-operand version).
Packit bd1cd8
//     * It must have operator<() defined.
Packit bd1cd8
//     Elements in the resulting sequences will also have that type.
Packit bd1cd8
//   * Condition start < end must be satisfied in order for resulting sequences
Packit bd1cd8
//     to contain any elements.
Packit bd1cd8
//
Packit bd1cd8
template <typename T, typename IncrementT>
Packit bd1cd8
internal::ParamGenerator<T> Range(T start, T end, IncrementT step) {
Packit bd1cd8
  return internal::ParamGenerator<T>(
Packit bd1cd8
      new internal::RangeGenerator<T, IncrementT>(start, end, step));
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template <typename T>
Packit bd1cd8
internal::ParamGenerator<T> Range(T start, T end) {
Packit bd1cd8
  return Range(start, end, 1);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
// ValuesIn() function allows generation of tests with parameters coming from
Packit bd1cd8
// a container.
Packit bd1cd8
//
Packit bd1cd8
// Synopsis:
Packit bd1cd8
// ValuesIn(const T (&array)[N])
Packit bd1cd8
//   - returns a generator producing sequences with elements from
Packit bd1cd8
//     a C-style array.
Packit bd1cd8
// ValuesIn(const Container& container)
Packit bd1cd8
//   - returns a generator producing sequences with elements from
Packit bd1cd8
//     an STL-style container.
Packit bd1cd8
// ValuesIn(Iterator begin, Iterator end)
Packit bd1cd8
//   - returns a generator producing sequences with elements from
Packit bd1cd8
//     a range [begin, end) defined by a pair of STL-style iterators. These
Packit bd1cd8
//     iterators can also be plain C pointers.
Packit bd1cd8
//
Packit bd1cd8
// Please note that ValuesIn copies the values from the containers
Packit bd1cd8
// passed in and keeps them to generate tests in RUN_ALL_TESTS().
Packit bd1cd8
//
Packit bd1cd8
// Examples:
Packit bd1cd8
//
Packit bd1cd8
// This instantiates tests from test case StringTest
Packit bd1cd8
// each with C-string values of "foo", "bar", and "baz":
Packit bd1cd8
//
Packit bd1cd8
// const char* strings[] = {"foo", "bar", "baz"};
Packit bd1cd8
// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings));
Packit bd1cd8
//
Packit bd1cd8
// This instantiates tests from test case StlStringTest
Packit bd1cd8
// each with STL strings with values "a" and "b":
Packit bd1cd8
//
Packit bd1cd8
// ::std::vector< ::std::string> GetParameterStrings() {
Packit bd1cd8
//   ::std::vector< ::std::string> v;
Packit bd1cd8
//   v.push_back("a");
Packit bd1cd8
//   v.push_back("b");
Packit bd1cd8
//   return v;
Packit bd1cd8
// }
Packit bd1cd8
//
Packit bd1cd8
// INSTANTIATE_TEST_CASE_P(CharSequence,
Packit bd1cd8
//                         StlStringTest,
Packit bd1cd8
//                         ValuesIn(GetParameterStrings()));
Packit bd1cd8
//
Packit bd1cd8
//
Packit bd1cd8
// This will also instantiate tests from CharTest
Packit bd1cd8
// each with parameter values 'a' and 'b':
Packit bd1cd8
//
Packit bd1cd8
// ::std::list<char> GetParameterChars() {
Packit bd1cd8
//   ::std::list<char> list;
Packit bd1cd8
//   list.push_back('a');
Packit bd1cd8
//   list.push_back('b');
Packit bd1cd8
//   return list;
Packit bd1cd8
// }
Packit bd1cd8
// ::std::list<char> l = GetParameterChars();
Packit bd1cd8
// INSTANTIATE_TEST_CASE_P(CharSequence2,
Packit bd1cd8
//                         CharTest,
Packit bd1cd8
//                         ValuesIn(l.begin(), l.end()));
Packit bd1cd8
//
Packit bd1cd8
template <typename ForwardIterator>
Packit bd1cd8
internal::ParamGenerator<
Packit bd1cd8
  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
Packit bd1cd8
ValuesIn(ForwardIterator begin, ForwardIterator end) {
Packit bd1cd8
  typedef typename ::testing::internal::IteratorTraits<ForwardIterator>
Packit bd1cd8
      ::value_type ParamType;
Packit bd1cd8
  return internal::ParamGenerator<ParamType>(
Packit bd1cd8
      new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end));
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template <typename T, size_t N>
Packit bd1cd8
internal::ParamGenerator<T> ValuesIn(const T (&array)[N]) {
Packit bd1cd8
  return ValuesIn(array, array + N);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template <class Container>
Packit bd1cd8
internal::ParamGenerator<typename Container::value_type> ValuesIn(
Packit bd1cd8
    const Container& container) {
Packit bd1cd8
  return ValuesIn(container.begin(), container.end());
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
// Values() allows generating tests from explicitly specified list of
Packit bd1cd8
// parameters.
Packit bd1cd8
//
Packit bd1cd8
// Synopsis:
Packit bd1cd8
// Values(T v1, T v2, ..., T vN)
Packit bd1cd8
//   - returns a generator producing sequences with elements v1, v2, ..., vN.
Packit bd1cd8
//
Packit bd1cd8
// For example, this instantiates tests from test case BarTest each
Packit bd1cd8
// with values "one", "two", and "three":
Packit bd1cd8
//
Packit bd1cd8
// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three"));
Packit bd1cd8
//
Packit bd1cd8
// This instantiates tests from test case BazTest each with values 1, 2, 3.5.
Packit bd1cd8
// The exact type of values will depend on the type of parameter in BazTest.
Packit bd1cd8
//
Packit bd1cd8
// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5));
Packit bd1cd8
//
Packit bd1cd8
// Currently, Values() supports from 1 to 50 parameters.
Packit bd1cd8
//
Packit bd1cd8
template <typename T1>
Packit bd1cd8
internal::ValueArray1<T1> Values(T1 v1) {
Packit bd1cd8
  return internal::ValueArray1<T1>(v1);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template <typename T1, typename T2>
Packit bd1cd8
internal::ValueArray2<T1, T2> Values(T1 v1, T2 v2) {
Packit bd1cd8
  return internal::ValueArray2<T1, T2>(v1, v2);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template <typename T1, typename T2, typename T3>
Packit bd1cd8
internal::ValueArray3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) {
Packit bd1cd8
  return internal::ValueArray3<T1, T2, T3>(v1, v2, v3);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template <typename T1, typename T2, typename T3, typename T4>
Packit bd1cd8
internal::ValueArray4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) {
Packit bd1cd8
  return internal::ValueArray4<T1, T2, T3, T4>(v1, v2, v3, v4);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template <typename T1, typename T2, typename T3, typename T4, typename T5>
Packit bd1cd8
internal::ValueArray5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4,
Packit bd1cd8
    T5 v5) {
Packit bd1cd8
  return internal::ValueArray5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6>
Packit bd1cd8
internal::ValueArray6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3,
Packit bd1cd8
    T4 v4, T5 v5, T6 v6) {
Packit bd1cd8
  return internal::ValueArray6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7>
Packit bd1cd8
internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3,
Packit bd1cd8
    T4 v4, T5 v5, T6 v6, T7 v7) {
Packit bd1cd8
  return internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5,
Packit bd1cd8
      v6, v7);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8>
Packit bd1cd8
internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2,
Packit bd1cd8
    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) {
Packit bd1cd8
  return internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4,
Packit bd1cd8
      v5, v6, v7, v8);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9>
Packit bd1cd8
internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2,
Packit bd1cd8
    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) {
Packit bd1cd8
  return internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3,
Packit bd1cd8
      v4, v5, v6, v7, v8, v9);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10>
Packit bd1cd8
internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1,
Packit bd1cd8
    T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) {
Packit bd1cd8
  return internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1,
Packit bd1cd8
      v2, v3, v4, v5, v6, v7, v8, v9, v10);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11>
Packit bd1cd8
internal::ValueArray11
Packit bd1cd8
    T11> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11) {
Packit bd1cd8
  return internal::ValueArray11
Packit bd1cd8
      T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12>
Packit bd1cd8
internal::ValueArray12
Packit bd1cd8
    T12> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12) {
Packit bd1cd8
  return internal::ValueArray12
Packit bd1cd8
      T12>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13>
Packit bd1cd8
internal::ValueArray13
Packit bd1cd8
    T13> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12, T13 v13) {
Packit bd1cd8
  return internal::ValueArray13
Packit bd1cd8
      T12, T13>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14>
Packit bd1cd8
internal::ValueArray14
Packit bd1cd8
    T14> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) {
Packit bd1cd8
  return internal::ValueArray14
Packit bd1cd8
      T12, T13, T14>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
Packit bd1cd8
      v14);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15>
Packit bd1cd8
internal::ValueArray15
Packit bd1cd8
    T14, T15> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
Packit bd1cd8
    T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) {
Packit bd1cd8
  return internal::ValueArray15
Packit bd1cd8
      T12, T13, T14, T15>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
Packit bd1cd8
      v13, v14, v15);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16>
Packit bd1cd8
internal::ValueArray16
Packit bd1cd8
    T14, T15, T16> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
Packit bd1cd8
    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
Packit bd1cd8
    T16 v16) {
Packit bd1cd8
  return internal::ValueArray16
Packit bd1cd8
      T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
Packit bd1cd8
      v12, v13, v14, v15, v16);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17>
Packit bd1cd8
internal::ValueArray17
Packit bd1cd8
    T14, T15, T16, T17> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
Packit bd1cd8
    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
Packit bd1cd8
    T16 v16, T17 v17) {
Packit bd1cd8
  return internal::ValueArray17
Packit bd1cd8
      T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
Packit bd1cd8
      v11, v12, v13, v14, v15, v16, v17);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18>
Packit bd1cd8
internal::ValueArray18
Packit bd1cd8
    T14, T15, T16, T17, T18> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
Packit bd1cd8
    T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
Packit bd1cd8
    T16 v16, T17 v17, T18 v18) {
Packit bd1cd8
  return internal::ValueArray18
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
Packit bd1cd8
      v10, v11, v12, v13, v14, v15, v16, v17, v18);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19>
Packit bd1cd8
internal::ValueArray19
Packit bd1cd8
    T14, T15, T16, T17, T18, T19> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
Packit bd1cd8
    T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
Packit bd1cd8
    T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) {
Packit bd1cd8
  return internal::ValueArray19
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19>(v1, v2, v3, v4, v5, v6, v7, v8,
Packit bd1cd8
      v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20>
Packit bd1cd8
internal::ValueArray20
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20> Values(T1 v1, T2 v2, T3 v3, T4 v4,
Packit bd1cd8
    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
Packit bd1cd8
    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) {
Packit bd1cd8
  return internal::ValueArray20
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20>(v1, v2, v3, v4, v5, v6, v7,
Packit bd1cd8
      v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21>
Packit bd1cd8
internal::ValueArray21
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21> Values(T1 v1, T2 v2, T3 v3, T4 v4,
Packit bd1cd8
    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
Packit bd1cd8
    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) {
Packit bd1cd8
  return internal::ValueArray21
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(v1, v2, v3, v4, v5, v6,
Packit bd1cd8
      v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22>
Packit bd1cd8
internal::ValueArray22
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22> Values(T1 v1, T2 v2, T3 v3,
Packit bd1cd8
    T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
Packit bd1cd8
    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
Packit bd1cd8
    T21 v21, T22 v22) {
Packit bd1cd8
  return internal::ValueArray22
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4,
Packit bd1cd8
      v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
Packit bd1cd8
      v20, v21, v22);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23>
Packit bd1cd8
internal::ValueArray23
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> Values(T1 v1, T2 v2,
Packit bd1cd8
    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
Packit bd1cd8
    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
Packit bd1cd8
    T21 v21, T22 v22, T23 v23) {
Packit bd1cd8
  return internal::ValueArray23
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>(v1, v2, v3,
Packit bd1cd8
      v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
Packit bd1cd8
      v20, v21, v22, v23);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24>
Packit bd1cd8
internal::ValueArray24
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Values(T1 v1, T2 v2,
Packit bd1cd8
    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
Packit bd1cd8
    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
Packit bd1cd8
    T21 v21, T22 v22, T23 v23, T24 v24) {
Packit bd1cd8
  return internal::ValueArray24
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>(v1, v2,
Packit bd1cd8
      v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
Packit bd1cd8
      v19, v20, v21, v22, v23, v24);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25>
Packit bd1cd8
internal::ValueArray25
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Values(T1 v1,
Packit bd1cd8
    T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
Packit bd1cd8
    T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
Packit bd1cd8
    T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) {
Packit bd1cd8
  return internal::ValueArray25
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>(v1,
Packit bd1cd8
      v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
Packit bd1cd8
      v18, v19, v20, v21, v22, v23, v24, v25);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26>
Packit bd1cd8
internal::ValueArray26
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
    T26> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
Packit bd1cd8
    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
Packit bd1cd8
    T26 v26) {
Packit bd1cd8
  return internal::ValueArray26
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
Packit bd1cd8
      v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27>
Packit bd1cd8
internal::ValueArray27
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
Packit bd1cd8
    T27> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
Packit bd1cd8
    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
Packit bd1cd8
    T26 v26, T27 v27) {
Packit bd1cd8
  return internal::ValueArray27
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
Packit bd1cd8
      v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28>
Packit bd1cd8
internal::ValueArray28
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
Packit bd1cd8
    T28> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
Packit bd1cd8
    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
Packit bd1cd8
    T26 v26, T27 v27, T28 v28) {
Packit bd1cd8
  return internal::ValueArray28
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
Packit bd1cd8
      v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
Packit bd1cd8
      v28);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29>
Packit bd1cd8
internal::ValueArray29
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
Packit bd1cd8
    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
Packit bd1cd8
    T26 v26, T27 v27, T28 v28, T29 v29) {
Packit bd1cd8
  return internal::ValueArray29
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
Packit bd1cd8
      v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
Packit bd1cd8
      v27, v28, v29);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30>
Packit bd1cd8
internal::ValueArray30
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
Packit bd1cd8
    T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
Packit bd1cd8
    T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
Packit bd1cd8
    T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) {
Packit bd1cd8
  return internal::ValueArray30
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
Packit bd1cd8
      v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
Packit bd1cd8
      v26, v27, v28, v29, v30);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31>
Packit bd1cd8
internal::ValueArray31
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
Packit bd1cd8
    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
Packit bd1cd8
    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
Packit bd1cd8
    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) {
Packit bd1cd8
  return internal::ValueArray31
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
Packit bd1cd8
      v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
Packit bd1cd8
      v25, v26, v27, v28, v29, v30, v31);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32>
Packit bd1cd8
internal::ValueArray32
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
Packit bd1cd8
    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
Packit bd1cd8
    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
Packit bd1cd8
    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
Packit bd1cd8
    T32 v32) {
Packit bd1cd8
  return internal::ValueArray32
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
Packit bd1cd8
      v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
Packit bd1cd8
      v24, v25, v26, v27, v28, v29, v30, v31, v32);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33>
Packit bd1cd8
internal::ValueArray33
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
Packit bd1cd8
    T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
Packit bd1cd8
    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
Packit bd1cd8
    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
Packit bd1cd8
    T32 v32, T33 v33) {
Packit bd1cd8
  return internal::ValueArray33
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8,
Packit bd1cd8
      v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
Packit bd1cd8
      v24, v25, v26, v27, v28, v29, v30, v31, v32, v33);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34>
Packit bd1cd8
internal::ValueArray34
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
Packit bd1cd8
    T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
Packit bd1cd8
    T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
Packit bd1cd8
    T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
Packit bd1cd8
    T31 v31, T32 v32, T33 v33, T34 v34) {
Packit bd1cd8
  return internal::ValueArray34
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34>(v1, v2, v3, v4, v5, v6, v7,
Packit bd1cd8
      v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
Packit bd1cd8
      v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35>
Packit bd1cd8
internal::ValueArray35
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35> Values(T1 v1, T2 v2, T3 v3, T4 v4,
Packit bd1cd8
    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
Packit bd1cd8
    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
Packit bd1cd8
    T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
Packit bd1cd8
    T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) {
Packit bd1cd8
  return internal::ValueArray35
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35>(v1, v2, v3, v4, v5, v6,
Packit bd1cd8
      v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
Packit bd1cd8
      v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36>
Packit bd1cd8
internal::ValueArray36
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36> Values(T1 v1, T2 v2, T3 v3, T4 v4,
Packit bd1cd8
    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
Packit bd1cd8
    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
Packit bd1cd8
    T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
Packit bd1cd8
    T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) {
Packit bd1cd8
  return internal::ValueArray36
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>(v1, v2, v3, v4,
Packit bd1cd8
      v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
Packit bd1cd8
      v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
Packit bd1cd8
      v34, v35, v36);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37>
Packit bd1cd8
internal::ValueArray37
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37> Values(T1 v1, T2 v2, T3 v3,
Packit bd1cd8
    T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
Packit bd1cd8
    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
Packit bd1cd8
    T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
Packit bd1cd8
    T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
Packit bd1cd8
    T37 v37) {
Packit bd1cd8
  return internal::ValueArray37
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3,
Packit bd1cd8
      v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
Packit bd1cd8
      v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
Packit bd1cd8
      v34, v35, v36, v37);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38>
Packit bd1cd8
internal::ValueArray38
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Values(T1 v1, T2 v2,
Packit bd1cd8
    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
Packit bd1cd8
    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
Packit bd1cd8
    T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
Packit bd1cd8
    T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
Packit bd1cd8
    T37 v37, T38 v38) {
Packit bd1cd8
  return internal::ValueArray38
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2,
Packit bd1cd8
      v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
Packit bd1cd8
      v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32,
Packit bd1cd8
      v33, v34, v35, v36, v37, v38);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39>
Packit bd1cd8
internal::ValueArray39
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Values(T1 v1, T2 v2,
Packit bd1cd8
    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
Packit bd1cd8
    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
Packit bd1cd8
    T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
Packit bd1cd8
    T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
Packit bd1cd8
    T37 v37, T38 v38, T39 v39) {
Packit bd1cd8
  return internal::ValueArray39
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>(v1,
Packit bd1cd8
      v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
Packit bd1cd8
      v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31,
Packit bd1cd8
      v32, v33, v34, v35, v36, v37, v38, v39);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40>
Packit bd1cd8
internal::ValueArray40
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Values(T1 v1,
Packit bd1cd8
    T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
Packit bd1cd8
    T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
Packit bd1cd8
    T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27,
Packit bd1cd8
    T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35,
Packit bd1cd8
    T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) {
Packit bd1cd8
  return internal::ValueArray40
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
Packit bd1cd8
      v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,
Packit bd1cd8
      v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40,
Packit bd1cd8
    typename T41>
Packit bd1cd8
internal::ValueArray41
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
Packit bd1cd8
    T41> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
Packit bd1cd8
    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
Packit bd1cd8
    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
Packit bd1cd8
    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) {
Packit bd1cd8
  return internal::ValueArray41
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40, T41>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
Packit bd1cd8
      v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28,
Packit bd1cd8
      v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40,
Packit bd1cd8
    typename T41, typename T42>
Packit bd1cd8
internal::ValueArray42
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
Packit bd1cd8
    T42> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
Packit bd1cd8
    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
Packit bd1cd8
    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
Packit bd1cd8
    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
Packit bd1cd8
    T42 v42) {
Packit bd1cd8
  return internal::ValueArray42
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
Packit bd1cd8
      v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
Packit bd1cd8
      v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41,
Packit bd1cd8
      v42);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40,
Packit bd1cd8
    typename T41, typename T42, typename T43>
Packit bd1cd8
internal::ValueArray43
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
Packit bd1cd8
    T43> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
Packit bd1cd8
    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
Packit bd1cd8
    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
Packit bd1cd8
    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
Packit bd1cd8
    T42 v42, T43 v43) {
Packit bd1cd8
  return internal::ValueArray43
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
Packit bd1cd8
      v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
Packit bd1cd8
      v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
Packit bd1cd8
      v41, v42, v43);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40,
Packit bd1cd8
    typename T41, typename T42, typename T43, typename T44>
Packit bd1cd8
internal::ValueArray44
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
Packit bd1cd8
    T44> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
Packit bd1cd8
    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
Packit bd1cd8
    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
Packit bd1cd8
    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
Packit bd1cd8
    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
Packit bd1cd8
    T42 v42, T43 v43, T44 v44) {
Packit bd1cd8
  return internal::ValueArray44
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40, T41, T42, T43, T44>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
Packit bd1cd8
      v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
Packit bd1cd8
      v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39,
Packit bd1cd8
      v40, v41, v42, v43, v44);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40,
Packit bd1cd8
    typename T41, typename T42, typename T43, typename T44, typename T45>
Packit bd1cd8
internal::ValueArray45
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
Packit bd1cd8
    T44, T45> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
Packit bd1cd8
    T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
Packit bd1cd8
    T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
Packit bd1cd8
    T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
Packit bd1cd8
    T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
Packit bd1cd8
    T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) {
Packit bd1cd8
  return internal::ValueArray45
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40, T41, T42, T43, T44, T45>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
Packit bd1cd8
      v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
Packit bd1cd8
      v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38,
Packit bd1cd8
      v39, v40, v41, v42, v43, v44, v45);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40,
Packit bd1cd8
    typename T41, typename T42, typename T43, typename T44, typename T45,
Packit bd1cd8
    typename T46>
Packit bd1cd8
internal::ValueArray46
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
Packit bd1cd8
    T44, T45, T46> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
Packit bd1cd8
    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
Packit bd1cd8
    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
Packit bd1cd8
    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
Packit bd1cd8
    T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
Packit bd1cd8
    T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) {
Packit bd1cd8
  return internal::ValueArray46
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40, T41, T42, T43, T44, T45, T46>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
Packit bd1cd8
      v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
Packit bd1cd8
      v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
Packit bd1cd8
      v38, v39, v40, v41, v42, v43, v44, v45, v46);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40,
Packit bd1cd8
    typename T41, typename T42, typename T43, typename T44, typename T45,
Packit bd1cd8
    typename T46, typename T47>
Packit bd1cd8
internal::ValueArray47
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
Packit bd1cd8
    T44, T45, T46, T47> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
Packit bd1cd8
    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
Packit bd1cd8
    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
Packit bd1cd8
    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
Packit bd1cd8
    T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
Packit bd1cd8
    T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) {
Packit bd1cd8
  return internal::ValueArray47
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40, T41, T42, T43, T44, T45, T46, T47>(v1, v2, v3, v4, v5, v6, v7, v8,
Packit bd1cd8
      v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
Packit bd1cd8
      v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
Packit bd1cd8
      v38, v39, v40, v41, v42, v43, v44, v45, v46, v47);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40,
Packit bd1cd8
    typename T41, typename T42, typename T43, typename T44, typename T45,
Packit bd1cd8
    typename T46, typename T47, typename T48>
Packit bd1cd8
internal::ValueArray48
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
Packit bd1cd8
    T44, T45, T46, T47, T48> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
Packit bd1cd8
    T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
Packit bd1cd8
    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
Packit bd1cd8
    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
Packit bd1cd8
    T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
Packit bd1cd8
    T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47,
Packit bd1cd8
    T48 v48) {
Packit bd1cd8
  return internal::ValueArray48
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7,
Packit bd1cd8
      v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
Packit bd1cd8
      v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36,
Packit bd1cd8
      v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40,
Packit bd1cd8
    typename T41, typename T42, typename T43, typename T44, typename T45,
Packit bd1cd8
    typename T46, typename T47, typename T48, typename T49>
Packit bd1cd8
internal::ValueArray49
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
Packit bd1cd8
    T44, T45, T46, T47, T48, T49> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
Packit bd1cd8
    T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
Packit bd1cd8
    T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
Packit bd1cd8
    T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
Packit bd1cd8
    T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38,
Packit bd1cd8
    T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46,
Packit bd1cd8
    T47 v47, T48 v48, T49 v49) {
Packit bd1cd8
  return internal::ValueArray49
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40, T41, T42, T43, T44, T45, T46, T47, T48, T49>(v1, v2, v3, v4, v5, v6,
Packit bd1cd8
      v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
Packit bd1cd8
      v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35,
Packit bd1cd8
      v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename T6, typename T7, typename T8, typename T9, typename T10,
Packit bd1cd8
    typename T11, typename T12, typename T13, typename T14, typename T15,
Packit bd1cd8
    typename T16, typename T17, typename T18, typename T19, typename T20,
Packit bd1cd8
    typename T21, typename T22, typename T23, typename T24, typename T25,
Packit bd1cd8
    typename T26, typename T27, typename T28, typename T29, typename T30,
Packit bd1cd8
    typename T31, typename T32, typename T33, typename T34, typename T35,
Packit bd1cd8
    typename T36, typename T37, typename T38, typename T39, typename T40,
Packit bd1cd8
    typename T41, typename T42, typename T43, typename T44, typename T45,
Packit bd1cd8
    typename T46, typename T47, typename T48, typename T49, typename T50>
Packit bd1cd8
internal::ValueArray50
Packit bd1cd8
    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
Packit bd1cd8
    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
Packit bd1cd8
    T44, T45, T46, T47, T48, T49, T50> Values(T1 v1, T2 v2, T3 v3, T4 v4,
Packit bd1cd8
    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
Packit bd1cd8
    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
Packit bd1cd8
    T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
Packit bd1cd8
    T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37,
Packit bd1cd8
    T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45,
Packit bd1cd8
    T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) {
Packit bd1cd8
  return internal::ValueArray50
Packit bd1cd8
      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
Packit bd1cd8
      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
Packit bd1cd8
      T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4,
Packit bd1cd8
      v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
Packit bd1cd8
      v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
Packit bd1cd8
      v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47,
Packit bd1cd8
      v48, v49, v50);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
// Bool() allows generating tests with parameters in a set of (false, true).
Packit bd1cd8
//
Packit bd1cd8
// Synopsis:
Packit bd1cd8
// Bool()
Packit bd1cd8
//   - returns a generator producing sequences with elements {false, true}.
Packit bd1cd8
//
Packit bd1cd8
// It is useful when testing code that depends on Boolean flags. Combinations
Packit bd1cd8
// of multiple flags can be tested when several Bool()'s are combined using
Packit bd1cd8
// Combine() function.
Packit bd1cd8
//
Packit bd1cd8
// In the following example all tests in the test case FlagDependentTest
Packit bd1cd8
// will be instantiated twice with parameters false and true.
Packit bd1cd8
//
Packit bd1cd8
// class FlagDependentTest : public testing::TestWithParam<bool> {
Packit bd1cd8
//   virtual void SetUp() {
Packit bd1cd8
//     external_flag = GetParam();
Packit bd1cd8
//   }
Packit bd1cd8
// }
Packit bd1cd8
// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool());
Packit bd1cd8
//
Packit bd1cd8
inline internal::ParamGenerator<bool> Bool() {
Packit bd1cd8
  return Values(false, true);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
# if GTEST_HAS_COMBINE
Packit bd1cd8
// Combine() allows the user to combine two or more sequences to produce
Packit bd1cd8
// values of a Cartesian product of those sequences' elements.
Packit bd1cd8
//
Packit bd1cd8
// Synopsis:
Packit bd1cd8
// Combine(gen1, gen2, ..., genN)
Packit bd1cd8
//   - returns a generator producing sequences with elements coming from
Packit bd1cd8
//     the Cartesian product of elements from the sequences generated by
Packit bd1cd8
//     gen1, gen2, ..., genN. The sequence elements will have a type of
Packit bd1cd8
//     tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types
Packit bd1cd8
//     of elements from sequences produces by gen1, gen2, ..., genN.
Packit bd1cd8
//
Packit bd1cd8
// Combine can have up to 10 arguments. This number is currently limited
Packit bd1cd8
// by the maximum number of elements in the tuple implementation used by Google
Packit bd1cd8
// Test.
Packit bd1cd8
//
Packit bd1cd8
// Example:
Packit bd1cd8
//
Packit bd1cd8
// This will instantiate tests in test case AnimalTest each one with
Packit bd1cd8
// the parameter values tuple("cat", BLACK), tuple("cat", WHITE),
Packit bd1cd8
// tuple("dog", BLACK), and tuple("dog", WHITE):
Packit bd1cd8
//
Packit bd1cd8
// enum Color { BLACK, GRAY, WHITE };
Packit bd1cd8
// class AnimalTest
Packit bd1cd8
//     : public testing::TestWithParam<tuple<const char*, Color> > {...};
Packit bd1cd8
//
Packit bd1cd8
// TEST_P(AnimalTest, AnimalLooksNice) {...}
Packit bd1cd8
//
Packit bd1cd8
// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest,
Packit bd1cd8
//                         Combine(Values("cat", "dog"),
Packit bd1cd8
//                                 Values(BLACK, WHITE)));
Packit bd1cd8
//
Packit bd1cd8
// This will instantiate tests in FlagDependentTest with all variations of two
Packit bd1cd8
// Boolean flags:
Packit bd1cd8
//
Packit bd1cd8
// class FlagDependentTest
Packit bd1cd8
//     : public testing::TestWithParam<tuple<bool, bool> > {
Packit bd1cd8
//   virtual void SetUp() {
Packit bd1cd8
//     // Assigns external_flag_1 and external_flag_2 values from the tuple.
Packit bd1cd8
//     tie(external_flag_1, external_flag_2) = GetParam();
Packit bd1cd8
//   }
Packit bd1cd8
// };
Packit bd1cd8
//
Packit bd1cd8
// TEST_P(FlagDependentTest, TestFeature1) {
Packit bd1cd8
//   // Test your code using external_flag_1 and external_flag_2 here.
Packit bd1cd8
// }
Packit bd1cd8
// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest,
Packit bd1cd8
//                         Combine(Bool(), Bool()));
Packit bd1cd8
//
Packit bd1cd8
template <typename Generator1, typename Generator2>
Packit bd1cd8
internal::CartesianProductHolder2<Generator1, Generator2> Combine(
Packit bd1cd8
    const Generator1& g1, const Generator2& g2) {
Packit bd1cd8
  return internal::CartesianProductHolder2<Generator1, Generator2>(
Packit bd1cd8
      g1, g2);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template <typename Generator1, typename Generator2, typename Generator3>
Packit bd1cd8
internal::CartesianProductHolder3<Generator1, Generator2, Generator3> Combine(
Packit bd1cd8
    const Generator1& g1, const Generator2& g2, const Generator3& g3) {
Packit bd1cd8
  return internal::CartesianProductHolder3<Generator1, Generator2, Generator3>(
Packit bd1cd8
      g1, g2, g3);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename Generator4>
Packit bd1cd8
internal::CartesianProductHolder4
Packit bd1cd8
    Generator4> Combine(
Packit bd1cd8
    const Generator1& g1, const Generator2& g2, const Generator3& g3,
Packit bd1cd8
        const Generator4& g4) {
Packit bd1cd8
  return internal::CartesianProductHolder4
Packit bd1cd8
      Generator4>(
Packit bd1cd8
      g1, g2, g3, g4);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename Generator4, typename Generator5>
Packit bd1cd8
internal::CartesianProductHolder5
Packit bd1cd8
    Generator4, Generator5> Combine(
Packit bd1cd8
    const Generator1& g1, const Generator2& g2, const Generator3& g3,
Packit bd1cd8
        const Generator4& g4, const Generator5& g5) {
Packit bd1cd8
  return internal::CartesianProductHolder5
Packit bd1cd8
      Generator4, Generator5>(
Packit bd1cd8
      g1, g2, g3, g4, g5);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename Generator4, typename Generator5, typename Generator6>
Packit bd1cd8
internal::CartesianProductHolder6
Packit bd1cd8
    Generator4, Generator5, Generator6> Combine(
Packit bd1cd8
    const Generator1& g1, const Generator2& g2, const Generator3& g3,
Packit bd1cd8
        const Generator4& g4, const Generator5& g5, const Generator6& g6) {
Packit bd1cd8
  return internal::CartesianProductHolder6
Packit bd1cd8
      Generator4, Generator5, Generator6>(
Packit bd1cd8
      g1, g2, g3, g4, g5, g6);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename Generator4, typename Generator5, typename Generator6,
Packit bd1cd8
    typename Generator7>
Packit bd1cd8
internal::CartesianProductHolder7
Packit bd1cd8
    Generator4, Generator5, Generator6, Generator7> Combine(
Packit bd1cd8
    const Generator1& g1, const Generator2& g2, const Generator3& g3,
Packit bd1cd8
        const Generator4& g4, const Generator5& g5, const Generator6& g6,
Packit bd1cd8
        const Generator7& g7) {
Packit bd1cd8
  return internal::CartesianProductHolder7
Packit bd1cd8
      Generator4, Generator5, Generator6, Generator7>(
Packit bd1cd8
      g1, g2, g3, g4, g5, g6, g7);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename Generator4, typename Generator5, typename Generator6,
Packit bd1cd8
    typename Generator7, typename Generator8>
Packit bd1cd8
internal::CartesianProductHolder8
Packit bd1cd8
    Generator4, Generator5, Generator6, Generator7, Generator8> Combine(
Packit bd1cd8
    const Generator1& g1, const Generator2& g2, const Generator3& g3,
Packit bd1cd8
        const Generator4& g4, const Generator5& g5, const Generator6& g6,
Packit bd1cd8
        const Generator7& g7, const Generator8& g8) {
Packit bd1cd8
  return internal::CartesianProductHolder8
Packit bd1cd8
      Generator4, Generator5, Generator6, Generator7, Generator8>(
Packit bd1cd8
      g1, g2, g3, g4, g5, g6, g7, g8);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename Generator4, typename Generator5, typename Generator6,
Packit bd1cd8
    typename Generator7, typename Generator8, typename Generator9>
Packit bd1cd8
internal::CartesianProductHolder9
Packit bd1cd8
    Generator4, Generator5, Generator6, Generator7, Generator8,
Packit bd1cd8
    Generator9> Combine(
Packit bd1cd8
    const Generator1& g1, const Generator2& g2, const Generator3& g3,
Packit bd1cd8
        const Generator4& g4, const Generator5& g5, const Generator6& g6,
Packit bd1cd8
        const Generator7& g7, const Generator8& g8, const Generator9& g9) {
Packit bd1cd8
  return internal::CartesianProductHolder9
Packit bd1cd8
      Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>(
Packit bd1cd8
      g1, g2, g3, g4, g5, g6, g7, g8, g9);
Packit bd1cd8
}
Packit bd1cd8
Packit bd1cd8
template 
Packit bd1cd8
    typename Generator4, typename Generator5, typename Generator6,
Packit bd1cd8
    typename Generator7, typename Generator8, typename Generator9,
Packit bd1cd8
    typename Generator10>
Packit bd1cd8
internal::CartesianProductHolder10
Packit bd1cd8
    Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
Packit bd1cd8
    Generator10> Combine(
Packit bd1cd8
    const Generator1& g1, const Generator2& g2, const Generator3& g3,
Packit bd1cd8
        const Generator4& g4, const Generator5& g5, const Generator6& g6,
Packit bd1cd8
        const Generator7& g7, const Generator8& g8, const Generator9& g9,
Packit bd1cd8
        const Generator10& g10) {
Packit bd1cd8
  return internal::CartesianProductHolder10
Packit bd1cd8
      Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
Packit bd1cd8
      Generator10>(
Packit bd1cd8
      g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);
Packit bd1cd8
}
Packit bd1cd8
# endif  // GTEST_HAS_COMBINE
Packit bd1cd8
Packit bd1cd8
Packit bd1cd8
Packit bd1cd8
# define TEST_P(test_case_name, test_name) \
Packit bd1cd8
  class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
Packit bd1cd8
      : public test_case_name { \
Packit bd1cd8
   public: \
Packit bd1cd8
    GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \
Packit bd1cd8
    virtual void TestBody(); \
Packit bd1cd8
   private: \
Packit bd1cd8
    static int AddToRegistry() { \
Packit bd1cd8
      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
Packit bd1cd8
          GetTestCasePatternHolder<test_case_name>(\
Packit bd1cd8
              #test_case_name, \
Packit bd1cd8
              ::testing::internal::CodeLocation(\
Packit bd1cd8
                  __FILE__, __LINE__))->AddTestPattern(\
Packit bd1cd8
                      #test_case_name, \
Packit bd1cd8
                      #test_name, \
Packit bd1cd8
                      new ::testing::internal::TestMetaFactory< \
Packit bd1cd8
                          GTEST_TEST_CLASS_NAME_(\
Packit bd1cd8
                              test_case_name, test_name)>()); \
Packit bd1cd8
      return 0; \
Packit bd1cd8
    } \
Packit bd1cd8
    static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
Packit bd1cd8
    GTEST_DISALLOW_COPY_AND_ASSIGN_(\
Packit bd1cd8
        GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \
Packit bd1cd8
  }; \
Packit bd1cd8
  int GTEST_TEST_CLASS_NAME_(test_case_name, \
Packit bd1cd8
                             test_name)::gtest_registering_dummy_ = \
Packit bd1cd8
      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
Packit bd1cd8
  void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
Packit bd1cd8
Packit bd1cd8
// The optional last argument to INSTANTIATE_TEST_CASE_P allows the user
Packit bd1cd8
// to specify a function or functor that generates custom test name suffixes
Packit bd1cd8
// based on the test parameters. The function should accept one argument of
Packit bd1cd8
// type testing::TestParamInfo<class ParamType>, and return std::string.
Packit bd1cd8
//
Packit bd1cd8
// testing::PrintToStringParamName is a builtin test suffix generator that
Packit bd1cd8
// returns the value of testing::PrintToString(GetParam()). It does not work
Packit bd1cd8
// for std::string or C strings.
Packit bd1cd8
//
Packit bd1cd8
// Note: test names must be non-empty, unique, and may only contain ASCII
Packit bd1cd8
// alphanumeric characters or underscore.
Packit bd1cd8
Packit bd1cd8
# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator, ...) \
Packit bd1cd8
  ::testing::internal::ParamGenerator<test_case_name::ParamType> \
Packit bd1cd8
      gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
Packit bd1cd8
  ::std::string gtest_##prefix##test_case_name##_EvalGenerateName_( \
Packit bd1cd8
      const ::testing::TestParamInfo<test_case_name::ParamType>& info) { \
Packit bd1cd8
    return ::testing::internal::GetParamNameGen<test_case_name::ParamType> \
Packit bd1cd8
        (__VA_ARGS__)(info); \
Packit bd1cd8
  } \
Packit bd1cd8
  int gtest_##prefix##test_case_name##_dummy_ GTEST_ATTRIBUTE_UNUSED_ = \
Packit bd1cd8
      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
Packit bd1cd8
          GetTestCasePatternHolder<test_case_name>(\
Packit bd1cd8
              #test_case_name, \
Packit bd1cd8
              ::testing::internal::CodeLocation(\
Packit bd1cd8
                  __FILE__, __LINE__))->AddTestCaseInstantiation(\
Packit bd1cd8
                      #prefix, \
Packit bd1cd8
                      &gtest_##prefix##test_case_name##_EvalGenerator_, \
Packit bd1cd8
                      &gtest_##prefix##test_case_name##_EvalGenerateName_, \
Packit bd1cd8
                      __FILE__, __LINE__)
Packit bd1cd8
Packit bd1cd8
}  // namespace testing
Packit bd1cd8
Packit bd1cd8
#endif  // GTEST_HAS_PARAM_TEST
Packit bd1cd8
Packit bd1cd8
#endif  // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_