Skip to content

Commit f8dd9d1

Browse files
LWG-3850: views::as_const on empty_view<T> should return empty_view<const T> (#3423)
Co-authored-by: Casey Carter <[email protected]>
1 parent bf64ffc commit f8dd9d1

File tree

2 files changed

+146
-76
lines changed

2 files changed

+146
-76
lines changed

stl/inc/ranges

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5408,7 +5408,7 @@ namespace ranges {
54085408

54095409
class _As_const_fn : public _Pipe::_Base<_As_const_fn> {
54105410
private:
5411-
enum class _St { _None, _All, _Reconstruct_span, _Reconstruct_ref, _Ref, _As_const };
5411+
enum class _St { _None, _All, _Empty, _Reconstruct_span, _Reconstruct_ref, _Ref, _As_const };
54125412

54135413
template <class>
54145414
static constexpr bool _Can_reconstruct_ref_view_v = false;
@@ -5423,6 +5423,8 @@ namespace ranges {
54235423

54245424
if constexpr (constant_range<views::all_t<_Rng>>) {
54255425
return {_St::_All, noexcept(views::all(_STD declval<_Rng>()))};
5426+
} else if constexpr (_Is_specialization_v<_Ty, empty_view>) {
5427+
return {_St::_Empty, true};
54265428
} else if constexpr (_Is_span_v<_Ty>) {
54275429
return {_St::_Reconstruct_span, true};
54285430
} else if constexpr (_Can_reconstruct_ref_view_v<_Ty>) {
@@ -5448,6 +5450,8 @@ namespace ranges {
54485450

54495451
if constexpr (_Strat == _St::_All) {
54505452
return views::all(_STD forward<_Rng>(_Range));
5453+
} else if constexpr (_Strat == _St::_Empty) {
5454+
return empty_view<const remove_reference_t<range_reference_t<_Rng>>>{};
54515455
} else if constexpr (_Strat == _St::_Reconstruct_span) {
54525456
return span<const typename _Ty::element_type, _Ty::extent>{_STD forward<_Rng>(_Range)};
54535457
} else if constexpr (_Strat == _St::_Reconstruct_ref) {

0 commit comments

Comments
 (0)