*/
template<class Container>
struct ValueTypeOfRange {
- private:
- static Container container_;
public:
- typedef decltype(*std::begin(container_))
- RefType;
- typedef typename std::decay<decltype(*std::begin(container_))>::type
- StorageType;
+ using RefType = decltype(*std::begin(std::declval<Container&>()));
+ using StorageType = typename std::decay<RefType>::type;
};
using std::vector;
using std::tuple;
+const folly::gen::detail::Map<
+ folly::gen::detail::MergeTuples> gTupleFlatten{};
+
auto even = [](int i) -> bool { return i % 2 == 0; };
auto odd = [](int i) -> bool { return i % 2 == 1; };
EXPECT_EQ(std::get<1>(zipped1[0]), std::make_tuple('A'));
auto zipped2 = from(zipped1)
- | tuple_flatten
+ | gTupleFlatten
| assert_type<tuple<int, string, char>&&>()
| as<vector>();
ASSERT_EQ(zipped2.size(), 3);
auto zipped3 = from(charTupleVec)
| zip(intStringTupleVec)
- | tuple_flatten
+ | gTupleFlatten
| assert_type<tuple<char, int, string>&&>()
| as<vector>();
ASSERT_EQ(zipped3.size(), 3);
auto zipped4 = from(intStringTupleVec)
| zip(doubleVec)
- | tuple_flatten
+ | gTupleFlatten
| assert_type<tuple<int, string, double>&&>()
| as<vector>();
ASSERT_EQ(zipped4.size(), 3);
auto zipped5 = from(doubleVec)
| zip(doubleVec)
| assert_type<tuple<double, double>>()
- | tuple_flatten // essentially a no-op
+ | gTupleFlatten // essentially a no-op
| assert_type<tuple<double, double>&&>()
| as<vector>();
ASSERT_EQ(zipped5.size(), 5);
auto zipped6 = from(intStringTupleVec)
| zip(charTupleVec)
- | tuple_flatten
+ | gTupleFlatten
| zip(doubleVec)
- | tuple_flatten
+ | gTupleFlatten
| assert_type<tuple<int, string, char, double>&&>()
| as<vector>();
ASSERT_EQ(zipped6.size(), 3);