File tree Expand file tree Collapse file tree 2 files changed +19
-3
lines changed Expand file tree Collapse file tree 2 files changed +19
-3
lines changed Original file line number Diff line number Diff line change @@ -1239,13 +1239,22 @@ inline size_t capacity_in_bytes(const SmallVector<T, N> &X) {
1239
1239
return X.capacity_in_bytes ();
1240
1240
}
1241
1241
1242
+ template <typename RangeType>
1243
+ using ValueTypeFromRangeType =
1244
+ typename std::remove_const<typename std::remove_reference<
1245
+ decltype (*std::begin (std::declval<RangeType &>()))>::type>::type;
1246
+
1242
1247
// / Given a range of type R, iterate the entire range and return a
1243
1248
// / SmallVector with elements of the vector. This is useful, for example,
1244
1249
// / when you want to iterate a range and then sort the results.
1245
1250
template <unsigned Size, typename R>
1246
- SmallVector<typename std::remove_const<typename std::remove_reference<
1247
- decltype (*std::begin (std::declval<R &>()))>::type>::type,
1248
- Size>
1251
+ SmallVector<ValueTypeFromRangeType<R>, Size> to_vector (R &&Range) {
1252
+ return {std::begin (Range), std::end (Range)};
1253
+ }
1254
+ template <typename R>
1255
+ SmallVector<ValueTypeFromRangeType<R>,
1256
+ CalculateSmallVectorDefaultInlinedElements<
1257
+ ValueTypeFromRangeType<R>>::value>
1249
1258
to_vector (R &&Range) {
1250
1259
return {std::begin (Range), std::end (Range)};
1251
1260
}
Original file line number Diff line number Diff line change @@ -307,6 +307,13 @@ TEST(STLExtrasTest, ToVector) {
307
307
EXPECT_EQ (I, Enumerated[I].index ());
308
308
EXPECT_EQ (v[I], Enumerated[I].value ());
309
309
}
310
+
311
+ auto EnumeratedImplicitSize = to_vector (enumerate(v));
312
+ ASSERT_EQ (3u , EnumeratedImplicitSize.size ());
313
+ for (size_t I = 0 ; I < v.size (); ++I) {
314
+ EXPECT_EQ (I, EnumeratedImplicitSize[I].index ());
315
+ EXPECT_EQ (v[I], EnumeratedImplicitSize[I].value ());
316
+ }
310
317
}
311
318
312
319
TEST (STLExtrasTest, ConcatRange) {
You can’t perform that action at this time.
0 commit comments