reuse IndexSequence from googletest
This commit is contained in:
		@@ -506,19 +506,8 @@ struct BooleanConstant {};
 | 
				
			|||||||
// reduce code size.
 | 
					// reduce code size.
 | 
				
			||||||
GTEST_API_ void IllegalDoDefault(const char* file, int line);
 | 
					GTEST_API_ void IllegalDoDefault(const char* file, int line);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Helper types for Apply() below.
 | 
					 | 
				
			||||||
template <size_t... Is> struct int_pack { typedef int_pack type; };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template <class Pack, size_t I> struct append;
 | 
					 | 
				
			||||||
template <size_t... Is, size_t I>
 | 
					 | 
				
			||||||
struct append<int_pack<Is...>, I> : int_pack<Is..., I> {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template <size_t C>
 | 
					 | 
				
			||||||
struct make_int_pack : append<typename make_int_pack<C - 1>::type, C - 1> {};
 | 
					 | 
				
			||||||
template <> struct make_int_pack<0> : int_pack<> {};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template <typename F, typename Tuple, size_t... Idx>
 | 
					template <typename F, typename Tuple, size_t... Idx>
 | 
				
			||||||
auto ApplyImpl(F&& f, Tuple&& args, int_pack<Idx...>) -> decltype(
 | 
					auto ApplyImpl(F&& f, Tuple&& args, IndexSequence<Idx...>) -> decltype(
 | 
				
			||||||
    std::forward<F>(f)(std::get<Idx>(std::forward<Tuple>(args))...)) {
 | 
					    std::forward<F>(f)(std::get<Idx>(std::forward<Tuple>(args))...)) {
 | 
				
			||||||
  return std::forward<F>(f)(std::get<Idx>(std::forward<Tuple>(args))...);
 | 
					  return std::forward<F>(f)(std::get<Idx>(std::forward<Tuple>(args))...);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -527,9 +516,9 @@ auto ApplyImpl(F&& f, Tuple&& args, int_pack<Idx...>) -> decltype(
 | 
				
			|||||||
template <typename F, typename Tuple>
 | 
					template <typename F, typename Tuple>
 | 
				
			||||||
auto Apply(F&& f, Tuple&& args)
 | 
					auto Apply(F&& f, Tuple&& args)
 | 
				
			||||||
    -> decltype(ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args),
 | 
					    -> decltype(ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args),
 | 
				
			||||||
                          make_int_pack<std::tuple_size<Tuple>::value>())) {
 | 
					                          MakeIndexSequence<std::tuple_size<Tuple>::value>())) {
 | 
				
			||||||
  return ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args),
 | 
					  return ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args),
 | 
				
			||||||
                   make_int_pack<std::tuple_size<Tuple>::value>());
 | 
					                   MakeIndexSequence<std::tuple_size<Tuple>::value>());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Template struct Function<F>, where F must be a function type, contains
 | 
					// Template struct Function<F>, where F must be a function type, contains
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user