On Mon, 1 Dec 2025 at 21:21, Patrick Palka <[email protected]> wrote:
>
> Tested on x86_64-pc-linux-gnu, does this look OK for trunk/15?

OK for both.

>
> -- >8 --
>
> flat_map's value_type is pair<key_type, mapped_type> which we define
> correctly in the container but not in the iterator.
>
>         PR libstdc++/122921
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/flat_map (_Flat_map_impl::_Iterator::value_type):
>         Remove const from key_type to make consistent with the
>         container's value_type.
>         * testsuite/23_containers/flat_map/1.cc (test09): New test.
>         * testsuite/23_containers/flat_multimap/1.cc (test09): New test.
> ---
>  libstdc++-v3/include/std/flat_map                    |  2 +-
>  libstdc++-v3/testsuite/23_containers/flat_map/1.cc   | 12 ++++++++++++
>  .../testsuite/23_containers/flat_multimap/1.cc       | 12 ++++++++++++
>  3 files changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/libstdc++-v3/include/std/flat_map 
> b/libstdc++-v3/include/std/flat_map
> index de006ad1c533..e48c3eae07fd 100644
> --- a/libstdc++-v3/include/std/flat_map
> +++ b/libstdc++-v3/include/std/flat_map
> @@ -953,7 +953,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>      public:
>        using iterator_category = input_iterator_tag;
>        using iterator_concept  = random_access_iterator_tag;
> -      using value_type        = pair<const key_type, mapped_type>;
> +      using value_type        = pair<key_type, mapped_type>;
>        using reference         = pair<const key_type&,
>                                      ranges::__maybe_const_t<_Const, 
> mapped_type>&>;
>        using difference_type   = ptrdiff_t;
> diff --git a/libstdc++-v3/testsuite/23_containers/flat_map/1.cc 
> b/libstdc++-v3/testsuite/23_containers/flat_map/1.cc
> index 01278d7dc33c..5bcda3464f1f 100644
> --- a/libstdc++-v3/testsuite/23_containers/flat_map/1.cc
> +++ b/libstdc++-v3/testsuite/23_containers/flat_map/1.cc
> @@ -263,6 +263,17 @@ test08()
>    m[k] = 0;
>  }
>
> +void
> +test09()
> +{
> +  // PR libstdc++/122921 - The value_type of flat_map's iterator should be
> +  // pair<Key, T> instead of pair<const Key, T>
> +  using type = std::flat_map<int, int>;
> +  using value_type = std::ranges::range_value_t<type>;
> +  using value_type = type::value_type;
> +  using value_type = std::pair<int, int>;
> +}
> +
>  int
>  main()
>  {
> @@ -277,4 +288,5 @@ main()
>    test06();
>    test07();
>    test08();
> +  test09();
>  }
> diff --git a/libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc 
> b/libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc
> index d746614401de..f143f3acd1b5 100644
> --- a/libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc
> +++ b/libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc
> @@ -232,6 +232,17 @@ test07()
>    VERIFY( std::ranges::equal(m, (std::pair<int,int>[]){{3,4},{3,3}}) );
>  }
>
> +void
> +test09()
> +{
> +  // PR libstdc++/122921 - The value_type of flat_map's iterator should be
> +  // pair<Key, T> instead of pair<const Key, T>
> +  using type = std::flat_multimap<int, int>;
> +  using value_type = std::ranges::range_value_t<type>;
> +  using value_type = type::value_type;
> +  using value_type = std::pair<int, int>;
> +}
> +
>  int
>  main()
>  {
> @@ -245,4 +256,5 @@ main()
>    test05();
>    test06();
>    test07();
> +  test09();
>  }
> --
> 2.52.0.154.gf0ef5b6d9b
>

Reply via email to