[libcxx-commits] [libcxx] [libc++] [test] Improve test coverage for containers' scary.pass.cpp (PR #131550)
A. Jiang via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Mar 28 00:08:47 PDT 2025
================
@@ -0,0 +1,26 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+// <flat_map>
+
+// class flat_map
+// class flat_multimap
+
+// Extension: SCARY/N2913 iterator compatibility between flat_map and flat_multimap
+
+#include <flat_map>
+
+#include "test_macros.h"
+
+void test() {
+ typedef std::flat_map<int, int> M1;
+ typedef std::flat_multimap<int, int> M2;
+
+ ASSERT_SAME_TYPE(M1::iterator, M2::iterator);
+ ASSERT_SAME_TYPE(M1::const_iterator, M2::const_iterator);
----------------
frederick-vs-ja wrote:
> I'm pretty sure we already have some tests that explicitly check that, since we discussed it with Hui as being a feature (more type safety).
I haven't found any test checking type difference between iterators in `libcxx/test/{std,libcxx}/containers/container.adaptors/flat.(multi|)map/` subdirectories. No `LIBCPP_STATIC_ASSERT` covers this, and when I ran this with MSVC STL's SCARY strategy, no failure was due to such `static_assert`.
> The proposal is to make `std::flat_set::iterator` the same as `std::flat_multiset::iterator`.
It didn't. When the paper was written even `boost::flat_set` didn't exist, so it couldn't know `flat_set` at all.
Per #128363, the current choice is making `std::flat_set::iterator` always different from `std::flat_multiset::iterator`.
https://github.com/llvm/llvm-project/pull/131550
More information about the libcxx-commits
mailing list