Index: libcxx/test/std/ranges/range.adaptors/range.zip/iterator/compare.pass.cpp =================================================================== --- libcxx/test/std/ranges/range.adaptors/range.zip/iterator/compare.pass.cpp +++ libcxx/test/std/ranges/range.adaptors/range.zip/iterator/compare.pass.cpp @@ -163,7 +163,12 @@ using Subrange = std::ranges::subrange; static_assert(!std::three_way_comparable); using R = std::ranges::zip_view; +#ifdef _LIBCPP_VERSION + // libc++ hasn't implemented LWG-3692 "zip_view::iterator's operator<=> is overconstrained" static_assert(!std::three_way_comparable>); +#else + static_assert(std::three_way_comparable>); +#endif int a[] = {1, 2, 3, 4}; int b[] = {5, 6, 7, 8, 9}; Index: libcxx/test/std/ranges/range.adaptors/range.zip/types.h =================================================================== --- libcxx/test/std/ranges/range.adaptors/range.zip/types.h +++ libcxx/test/std/ranges/range.adaptors/range.zip/types.h @@ -319,7 +319,7 @@ } constexpr void operator++(int) { ++it_; } - constexpr int& operator*() const { return *it_; } + constexpr auto& operator*() const { return *it_; } friend constexpr bool operator==(common_input_iterator const&, common_input_iterator const&) = default; };