5 #ifndef VCCC_CONCEPTS_BOOLEAN_TESTABLE_HPP_
6 #define VCCC_CONCEPTS_BOOLEAN_TESTABLE_HPP_
18 struct boolean_testable_impl : convertible_to<B, bool> {};
20 template<
typename T,
typename =
void>
21 struct is_explicitly_negatable : std::false_type {};
23 struct is_explicitly_negatable<T,
void_t<decltype(!
std::declval<T>())> > : std::true_type {};
29 is_explicitly_negatable<std::add_lvalue_reference_t<std::remove_reference_t<B>>>,
30 is_explicitly_negatable<std::add_rvalue_reference_t<std::remove_reference_t<B>>>
33 struct boolean_testable_stage_2 : std::false_type {};
36 struct boolean_testable_stage_2<B, true>
38 boolean_testable_impl<decltype(!std::declval< std::add_lvalue_reference_t<std::remove_reference_t<B>> >())>,
39 boolean_testable_impl<decltype(!std::declval< std::add_rvalue_reference_t<std::remove_reference_t<B>> >())>
44 bool = conjunction<boolean_testable_impl<B>, is_referencable<B>>
::value
46 struct boolean_testable_stage_1 : std::false_type {};
49 struct boolean_testable_stage_1<B, true> : boolean_testable_stage_2<B> {};
Definition: matrix.hpp:495
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
Definition: boolean_testable.hpp:69