17 #ifndef OPENKALMAN_COMPATIBILITY_VIEWS_VIEW_CONCEPTS_HPP 18 #define OPENKALMAN_COMPATIBILITY_VIEWS_VIEW_CONCEPTS_HPP 20 #ifndef __cpp_lib_ranges 37 template<
typename T,
typename U, std::enable_if_t<not std::is_same_v<T, view_
interface<U>>,
int> = 0>
41 template<
typename T,
typename =
void>
46 std::void_t<decltype(is_derived_from_view_interface_test(std::declval<T>(), std::declval<T>()))>> : std::true_type {};
51 inline constexpr
bool enable_view =
52 (std::is_base_of_v<view_base, T> and std::is_convertible_v<const volatile T&, const volatile view_base&>) or
57 inline constexpr
bool view = range<T> and movable<T> and enable_view<T>;
75 constexpr
bool viewable_range = ranges::range<T> and
76 ((view<remove_cvref_t<T>> and std::is_constructible_v<remove_cvref_t<T>, T>) or
77 (not view<remove_cvref_t<T>> and
78 (std::is_lvalue_reference_v<T> or
86 #endif //OPENKALMAN_COMPATIBILITY_VIEWS_VIEW_CONCEPTS_HPP Definition: view_interface.hpp:32
Definition: tuple_reverse.hpp:103
constexpr bool value
T is numerical value or is reducible to a numerical value.
Definition: value.hpp:31
Definition: range-access.hpp:25
Definition: view-concepts.hpp:67
Definitions relating to the availability of c++ language features.
Definitions implementing features of the c++ ranges library for compatibility.
Definition: view-concepts.hpp:42
Definition: view-concepts.hpp:33
Whether the argument is a specialization of std::initializer_list.
Definition: global-definitions.hpp:165
Global definitions for OpenKalman.