File tree Expand file tree Collapse file tree 1 file changed +30
-0
lines changed
libcxx/test/std/ranges/range.adaptors/range.concat Expand file tree Collapse file tree 1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change @@ -45,6 +45,26 @@ struct NoSizeView : std::ranges::view_base {
4545 constexpr auto end () const { return buffer + 8 ; }
4646};
4747
48+ struct IntSizeView : std::ranges::view_base {
49+ using iterator = forward_iterator<int *>;
50+
51+ constexpr IntSizeView () {}
52+ constexpr auto begin () const { return iterator{buffer}; }
53+ constexpr auto end () const { return iterator{buffer + 9 }; }
54+ constexpr int size () const { return 9 ; }
55+ };
56+
57+ struct UnsignedSizeView : std::ranges::view_base {
58+ using iterator = forward_iterator<int *>;
59+
60+ constexpr UnsignedSizeView () {}
61+ constexpr auto begin () const { return iterator{buffer}; }
62+ constexpr auto end () const { return iterator{buffer + 9 }; }
63+ constexpr unsigned int size () const { return 9 ; }
64+ };
65+
66+
67+
4868constexpr bool test () {
4969 {
5070 // single range
@@ -89,6 +109,16 @@ constexpr bool test() {
89109 static_assert (!std::ranges::sized_range<decltype (std::as_const (v))>);
90110 }
91111
112+ {
113+ // two ranges with different size type
114+ std::ranges::concat_view v (UnsignedSizeView (), IntSizeView ());
115+ assert (v.size () == 18 );
116+ // common type between size_t and int should be size_t
117+ ASSERT_SAME_TYPE (decltype (v.size ()), unsigned int );
118+ }
119+
120+
121+
92122 return true ;
93123}
94124
You can’t perform that action at this time.
0 commit comments