@@ -749,12 +749,6 @@ struct has_value_type: std::false_type {};
749749template <typename Type>
750750struct has_value_type <Type, std::void_t <typename Type::value_type>>: std::true_type {};
751751
752- template <typename , typename = void >
753- struct has_void_element_type : std::false_type {};
754-
755- template <typename Type>
756- struct has_void_element_type <Type, std::remove_const_t <typename std::pointer_traits<Type>::element_type>>: std::true_type {};
757-
758752template <typename >
759753[[nodiscard]] constexpr bool dispatch_is_equality_comparable ();
760754
@@ -776,20 +770,20 @@ template<typename Type>
776770template <typename Type>
777771[[nodiscard]] constexpr bool dispatch_is_equality_comparable () {
778772 // NOLINTBEGIN(modernize-use-transparent-functors)
779- if constexpr (std::is_array_v<Type> || has_void_element_type<Type>::value ) {
773+ if constexpr (std::is_array_v<Type>) {
780774 return false ;
781- } else if constexpr (!is_iterator_v<Type> && has_value_type<Type>::value) {
782- if constexpr (std::is_same_v<typename Type::value_type, Type> || dispatch_is_equality_comparable<typename Type::value_type>()) {
783- return maybe_equality_comparable<Type>(0 );
784- } else {
785- return false ;
786- }
787775 } else if constexpr (is_complete_v<std::tuple_size<std::remove_cv_t <Type>>>) {
788776 if constexpr (has_tuple_size_value<Type>::value) {
789777 return maybe_equality_comparable<Type>(0 ) && unpack_maybe_equality_comparable<Type>(std::make_index_sequence<std::tuple_size<Type>::value>{});
790778 } else {
791779 return maybe_equality_comparable<Type>(0 );
792780 }
781+ } else if constexpr (has_value_type<Type>::value) {
782+ if constexpr (is_iterator_v<Type> || std::is_same_v<typename Type::value_type, Type> || dispatch_is_equality_comparable<typename Type::value_type>()) {
783+ return maybe_equality_comparable<Type>(0 );
784+ } else {
785+ return false ;
786+ }
793787 } else {
794788 return maybe_equality_comparable<Type>(0 );
795789 }
0 commit comments