diff --git a/libcxx/include/__algorithm/unwrap_iter.h b/libcxx/include/__algorithm/unwrap_iter.h index b66a682e765fa..ea862cd2f6f30 100644 --- a/libcxx/include/__algorithm/unwrap_iter.h +++ b/libcxx/include/__algorithm/unwrap_iter.h @@ -57,21 +57,19 @@ struct __unwrap_iter_impl<_Iter, true> { } }; -template , - __enable_if_t::value, int> = 0> +template > inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 decltype(_Impl::__unwrap(std::declval<_Iter>())) __unwrap_iter(_Iter __i) _NOEXCEPT { - return _Impl::__unwrap(__i); -} - // Allow input_iterators to be passed to __unwrap_iter (but not __rewrap_iter) #if _LIBCPP_STD_VER >= 20 -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI constexpr _Iter __unwrap_iter(_Iter __i) noexcept { - return __i; -} + if constexpr (!is_copy_constructible_v<_Iter>) { + return __i; + } else #endif + { + return _Impl::__unwrap(__i); + } +} template > _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _OrigIter __rewrap_iter(_OrigIter __orig_iter, _Iter __iter) _NOEXCEPT {