diff --git a/libcxx/include/__ranges/empty_view.h b/libcxx/include/__ranges/empty_view.h --- a/libcxx/include/__ranges/empty_view.h +++ b/libcxx/include/__ranges/empty_view.h @@ -36,6 +36,13 @@ template inline constexpr bool enable_borrowed_range> = true; + + namespace views { + + template + inline constexpr empty_view<_Tp> empty{}; + + } // namespace views } // namespace ranges #endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES) diff --git a/libcxx/include/ranges b/libcxx/include/ranges --- a/libcxx/include/ranges +++ b/libcxx/include/ranges @@ -120,6 +120,14 @@ requires is_object_v class empty_view; + template + inline constexpr bool enable_borrowed_range> = true; + + namespace views { + template + inline constexpr empty_view empty{}; + } + // [range.all], all view namespace views { inline constexpr unspecified all = unspecified; diff --git a/libcxx/test/std/ranges/range.adaptors/range.empty/views.empty.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.empty/views.empty.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/ranges/range.adaptors/range.empty/views.empty.pass.cpp @@ -0,0 +1,51 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11, c++14, c++17 +// UNSUPPORTED: libcpp-has-no-incomplete-ranges + +// template +// inline constexpr empty_view<_Tp> empty{}; + +#include +#include + +#include "test_macros.h" + +template +constexpr void testType() { + ASSERT_SAME_TYPE(decltype(std::views::empty), const std::ranges::empty_view); + ASSERT_SAME_TYPE(decltype((std::views::empty)), const std::ranges::empty_view&); + + auto v = std::views::empty; + assert(std::ranges::empty(v)); +} + +struct Empty {}; +struct BigType { + char buff[8]; +}; + +constexpr bool test() { + + testType(); + testType(); + testType(); + testType(); + testType(); + testType(); + + return true; +} + +int main(int, char**) { + test(); + static_assert(test()); + + return 0; +}