Skip to content

Commit 302c24d

Browse files
conditional pack indexing
1 parent f160d0f commit 302c24d

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

libcxx/include/__ranges/concat_view.h

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,20 @@ _LIBCPP_BEGIN_NAMESPACE_STD
6767

6868
namespace ranges {
6969

70+
# ifdef __cpp_pack_indexing
7071
template <class... _Tp>
7172
using __extract_last = _Tp...[sizeof...(_Tp) - 1];
73+
# else
74+
template <class _Tp, class... _Tail>
75+
struct __extract_last_impl : __extract_last<_Tail...> {};
76+
template <class _Tp>
77+
struct __extract_last_impl<_Tp> {
78+
using type = _Tp;
79+
};
80+
81+
template <class... _Tp>
82+
using __extract_last = __extract_last_impl<_Tp...>::type;
83+
# endif
7284

7385
template <class _Tp, class... _Tail>
7486
constexpr bool __derived_from_pack =
@@ -268,8 +280,8 @@ class concat_view<_Views...>::__iterator {
268280
if constexpr (common_range<prev_view>) {
269281
it_.template emplace<_Idx - 1>(ranges::end(std::get<_Idx - 1>(parent_->__views_)));
270282
} else {
271-
it_.template emplace<_Idx - 1>(ranges::__next(
272-
ranges::begin(std::get<_Idx - 1>(parent_->__views_)), ranges::size(std::get<_Idx - 1>(parent_->__views_))));
283+
it_.template emplace<_Idx - 1>(ranges::__next(ranges::begin(std::get<_Idx - 1>(parent_->__views_)),
284+
ranges::size(std::get<_Idx - 1>(parent_->__views_))));
273285
}
274286
prev<_Idx - 1>();
275287
} else {
@@ -601,8 +613,9 @@ namespace views {
601613
namespace __concat {
602614
struct __fn {
603615
template <class... _Views>
604-
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Views... __views) const noexcept(
605-
noexcept(concat_view(std::forward<_Views>(__views)...))) -> decltype(concat_view(std::forward<_Views>(__views)...)) {
616+
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Views... __views) const
617+
noexcept(noexcept(concat_view(std::forward<_Views>(__views)...)))
618+
-> decltype(concat_view(std::forward<_Views>(__views)...)) {
606619
return concat_view(std::forward<_Views>(__views)...);
607620
}
608621
};

0 commit comments

Comments
 (0)