[libc++] add global variable template std::views::empty
[libc++] add global variable template std::views::empty Note it is neither a range adaptor, nor a CPO. It is simplify a global variable template. Reviewed By: #libc, Mordante Differential Revision: https://reviews.llvm.org/D122996
This commit is contained in:
parent
ae0fb61303
commit
c00df57b86
|
@ -36,6 +36,13 @@ namespace ranges {
|
|||
|
||||
template<class _Tp>
|
||||
inline constexpr bool enable_borrowed_range<empty_view<_Tp>> = true;
|
||||
|
||||
namespace views {
|
||||
|
||||
template <class _Tp>
|
||||
inline constexpr empty_view<_Tp> empty{};
|
||||
|
||||
} // namespace views
|
||||
} // namespace ranges
|
||||
|
||||
#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
|
||||
|
|
|
@ -120,6 +120,14 @@ namespace std::ranges {
|
|||
requires is_object_v<T>
|
||||
class empty_view;
|
||||
|
||||
template<class T>
|
||||
inline constexpr bool enable_borrowed_range<empty_view<T>> = true;
|
||||
|
||||
namespace views {
|
||||
template<class T>
|
||||
inline constexpr empty_view<T> empty{};
|
||||
}
|
||||
|
||||
// [range.all], all view
|
||||
namespace views {
|
||||
inline constexpr unspecified all = unspecified;
|
||||
|
|
|
@ -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 <class _Tp>
|
||||
// inline constexpr empty_view<_Tp> empty{};
|
||||
|
||||
#include <ranges>
|
||||
#include <cassert>
|
||||
|
||||
#include "test_macros.h"
|
||||
|
||||
template <class T>
|
||||
constexpr void testType() {
|
||||
ASSERT_SAME_TYPE(decltype(std::views::empty<T>), const std::ranges::empty_view<T>);
|
||||
ASSERT_SAME_TYPE(decltype((std::views::empty<T>)), const std::ranges::empty_view<T>&);
|
||||
|
||||
auto v = std::views::empty<T>;
|
||||
assert(std::ranges::empty(v));
|
||||
}
|
||||
|
||||
struct Empty {};
|
||||
struct BigType {
|
||||
char buff[8];
|
||||
};
|
||||
|
||||
constexpr bool test() {
|
||||
|
||||
testType<int>();
|
||||
testType<const int>();
|
||||
testType<int*>();
|
||||
testType<Empty>();
|
||||
testType<const Empty>();
|
||||
testType<BigType>();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test();
|
||||
static_assert(test());
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue