From 9e2c4cb5470632d3a29b37a628f9db950790c004 Mon Sep 17 00:00:00 2001 From: Nikolai Vavilov Date: Sat, 19 Apr 2025 14:02:59 +0300 Subject: [PATCH] Fix [flat.map.modifiers] bugs found by libcxx tests --- stl/inc/flat_map | 17 +++++------------ tests/libcxx/expected_results.txt | 15 --------------- 2 files changed, 5 insertions(+), 27 deletions(-) diff --git a/stl/inc/flat_map b/stl/inc/flat_map index c649e463eae..3baef2c8cfe 100644 --- a/stl/inc/flat_map +++ b/stl/inc/flat_map @@ -940,17 +940,8 @@ private: // Insert the new elements at the end for (; _First != _Last; ++_First) { value_type _Val = *_First; - if constexpr (requires { _Data.keys.push_back(_STD move(_Val.first)); }) { - _Data.keys.push_back(_STD move(_Val.first)); - } else { - _Data.keys.insert(_Data.keys.end(), _STD move(_Val.first)); - } - - if constexpr (requires { _Data.values.push_back(_STD move(_Val.second)); }) { - _Data.values.push_back(_STD move(_Val.second)); - } else { - _Data.values.insert(_Data.values.end(), _STD move(_Val.second)); - } + _Data.keys.insert(_Data.keys.end(), _STD move(_Val.first)); + _Data.values.insert(_Data.values.end(), _STD move(_Val.second)); } // Sort the newly inserted elements @@ -1451,7 +1442,9 @@ public: // [flat.multimap.modifiers] Modifiers template - iterator emplace(_ArgTypes&&... _Args) { + iterator emplace(_ArgTypes&&... _Args) + requires is_constructible_v + { value_type _Val(_STD forward<_ArgTypes>(_Args)...); return _Emplace_key_mapped(_STD move(_Val.first), _STD move(_Val.second)); } diff --git a/tests/libcxx/expected_results.txt b/tests/libcxx/expected_results.txt index 67878076fc2..5a26fed73fc 100644 --- a/tests/libcxx/expected_results.txt +++ b/tests/libcxx/expected_results.txt @@ -232,9 +232,6 @@ std/strings/c.strings/cuchar.compile.pass.cpp FAIL # P0429R9 -# FIXME! static_assert(!CanEmplace); -std/containers/container.adaptors/flat.multimap/flat.multimap.modifiers/emplace.pass.cpp FAIL - # FIXME! error: no type named 'value_type' in 'std::greater' std/containers/container.adaptors/flat.map/flat.map.cons/deduct.pass.cpp FAIL std/containers/container.adaptors/flat.multimap/flat.multimap.cons/deduct.pass.cpp FAIL @@ -253,18 +250,6 @@ std/containers/container.adaptors/flat.multimap/flat.multimap.cons/move_exceptio std/containers/container.adaptors/flat.map/flat.map.cons/move.pass.cpp FAIL std/containers/container.adaptors/flat.multimap/flat.multimap.cons/move.pass.cpp FAIL -# FIXME! Assertion failed: false -std/containers/container.adaptors/flat.map/flat.map.modifiers/insert_initializer_list.pass.cpp FAIL -std/containers/container.adaptors/flat.map/flat.map.modifiers/insert_iter_iter.pass.cpp FAIL -std/containers/container.adaptors/flat.map/flat.map.modifiers/insert_range.pass.cpp FAIL -std/containers/container.adaptors/flat.map/flat.map.modifiers/insert_sorted_initializer_list.pass.cpp FAIL -std/containers/container.adaptors/flat.map/flat.map.modifiers/insert_sorted_iter_iter.pass.cpp FAIL -std/containers/container.adaptors/flat.multimap/flat.multimap.modifiers/insert_initializer_list.pass.cpp FAIL -std/containers/container.adaptors/flat.multimap/flat.multimap.modifiers/insert_iter_iter.pass.cpp FAIL -std/containers/container.adaptors/flat.multimap/flat.multimap.modifiers/insert_range.pass.cpp FAIL -std/containers/container.adaptors/flat.multimap/flat.multimap.modifiers/insert_sorted_initializer_list.pass.cpp FAIL -std/containers/container.adaptors/flat.multimap/flat.multimap.modifiers/insert_sorted_iter_iter.pass.cpp FAIL - # FIXME! warning C4242: 'initializing': conversion from '_Ty' to '_Ty2', possible loss of data std/containers/container.adaptors/flat.map/flat.map.cons/copy_assign.pass.cpp:0 FAIL std/containers/container.adaptors/flat.map/flat.map.cons/copy_assign.pass.cpp:1 FAIL