diff options
author | Jan Svoboda <jan_svoboda@apple.com> | 2024-11-02 20:34:52 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-02 20:34:52 -0700 |
commit | bf099f4682bf088aaa49b2c72fb1ef3250213fbb (patch) | |
tree | 46dfadca3ea8c73e856cf73e9e2470d5eae65f9a /llvm/unittests/ADT/StringMapTest.cpp | |
parent | 5091a359d9807db8f7d62375696f93fc34226969 (diff) | |
download | llvm-bf099f4682bf088aaa49b2c72fb1ef3250213fbb.zip llvm-bf099f4682bf088aaa49b2c72fb1ef3250213fbb.tar.gz llvm-bf099f4682bf088aaa49b2c72fb1ef3250213fbb.tar.bz2 |
[llvm][ADT] Structured bindings for move-only types in `StringMap` (#114676)
This PR implements destructuring of `StringMapEntry<T>` where `T` is a
move-only type. Also adds the non-const version.
Diffstat (limited to 'llvm/unittests/ADT/StringMapTest.cpp')
-rw-r--r-- | llvm/unittests/ADT/StringMapTest.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/StringMapTest.cpp b/llvm/unittests/ADT/StringMapTest.cpp index c9ef3f8a..35135cd 100644 --- a/llvm/unittests/ADT/StringMapTest.cpp +++ b/llvm/unittests/ADT/StringMapTest.cpp @@ -381,6 +381,9 @@ struct MoveOnly { return *this; } + bool operator==(const MoveOnly &RHS) const { return i == RHS.i; } + bool operator!=(const MoveOnly &RHS) const { return i != RHS.i; } + private: MoveOnly(const MoveOnly &) = delete; MoveOnly &operator=(const MoveOnly &) = delete; @@ -550,6 +553,26 @@ TEST_F(StringMapTest, StructuredBindings) { EXPECT_EQ("a", Key); EXPECT_EQ(42, Value); } + + for (const auto &[Key, Value] : A) { + EXPECT_EQ("a", Key); + EXPECT_EQ(42, Value); + } +} + +TEST_F(StringMapTest, StructuredBindingsMoveOnly) { + StringMap<MoveOnly> A; + A.insert(std::make_pair("a", MoveOnly(42))); + + for (auto &[Key, Value] : A) { + EXPECT_EQ("a", Key); + EXPECT_EQ(MoveOnly(42), Value); + } + + for (const auto &[Key, Value] : A) { + EXPECT_EQ("a", Key); + EXPECT_EQ(MoveOnly(42), Value); + } } namespace { |