[libcxx-commits] [libcxx] [libc++] Introduce `__product_iterator_traits` and optimise `flat_map::insert` (PR #139454)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Jun 6 10:38:46 PDT 2025
================
@@ -0,0 +1,46 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17
+
+#include <ranges>
+#include <type_traits>
+
+#include "test_macros.h"
+#include "test_iterators.h"
+
+constexpr bool test() {
+ {
+ // Test that the __get_iterator_element can handle a non-copyable iterator
+ int Date[] = {1, 2, 3, 4};
+ cpp20_input_iterator<int*> iter(Date);
+ sentinel_wrapper<cpp20_input_iterator<int*>> sent{cpp20_input_iterator<int*>(Date + 4)};
+ std::ranges::subrange r1(std::move(iter), std::move(sent));
+ auto v = std::views::zip(std::move(r1), std::views::iota(0, 4));
+ auto it = v.begin();
+
+ using Iter = decltype(it);
+
+ static_assert(!std::is_copy_constructible_v<Iter>);
+
+ static_assert(std::__product_iterator_traits<Iter>::__size == 2);
+ std::same_as<cpp20_input_iterator<int*>&> decltype(auto) it1 =
----------------
ldionne wrote:
You might want to also add a test for `__make_product_iterator`?
https://github.com/llvm/llvm-project/pull/139454
More information about the libcxx-commits
mailing list