Files
clang-p2996/libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp
Mark de Wever 71909de374 [libc++] Disable incomplete library features.
Adds a new CMake option to disable the usage of incomplete headers.
These incomplete headers are not guaranteed to be ABI stable. This
option is intended to be used by vendors so they can avoid their users
from code that's not ready for production usage.

The option is enabled by default.

Differential Revision: https://reviews.llvm.org/D106763
2021-07-27 22:37:35 +02:00

49 lines
1.7 KiB
C++

//===----------------------------------------------------------------------===//
//
// 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-no-concepts
// UNSUPPORTED: libcpp-has-no-incomplete-ranges
// <ranges>
// template<class T>
// inline constexpr bool enable_view = ...;
#include <ranges>
#include "test_macros.h"
// Doesn't derive from view_base
struct Empty { };
static_assert(!std::ranges::enable_view<Empty>);
// Derives from view_base, but privately
struct PrivateViewBase : private std::ranges::view_base { };
static_assert(!std::ranges::enable_view<PrivateViewBase>);
// Derives from view_base, but specializes enable_view to false
struct EnableViewFalse : std::ranges::view_base { };
namespace std::ranges { template <> constexpr bool enable_view<EnableViewFalse> = false; }
static_assert(!std::ranges::enable_view<EnableViewFalse>);
// Derives from view_base
struct PublicViewBase : std::ranges::view_base { };
static_assert(std::ranges::enable_view<PublicViewBase>);
// Does not derive from view_base, but specializes enable_view to true
struct EnableViewTrue { };
namespace std::ranges { template <> constexpr bool enable_view<EnableViewTrue> = true; }
static_assert(std::ranges::enable_view<EnableViewTrue>);
// Make sure that enable_view is a bool, not some other contextually-convertible-to-bool type.
ASSERT_SAME_TYPE(decltype(std::ranges::enable_view<Empty>), const bool);
ASSERT_SAME_TYPE(decltype(std::ranges::enable_view<PublicViewBase>), const bool);