aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authorvadim-xd <vadim-xd@yandex-team.com>2025-03-06 23:16:47 +0300
committervadim-xd <vadim-xd@yandex-team.com>2025-03-06 23:29:53 +0300
commit9b0a13bddce49bfb5ea59d8c4a668d32d7dada3b (patch)
tree703460061dcc9d4b2905303cd47964909cd7ec18 /library/cpp
parent6294a7d3a99349c80ab2fc1ced8a246eb7d14208 (diff)
downloadydb-9b0a13bddce49bfb5ea59d8c4a668d32d7dada3b.tar.gz
Return reference from TCompactVector::emplace_back
Fixup rXXXXXX commit_hash:775dffda71dd0a6ad0e91ca361b27ba4f15a0039
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/containers/compact_vector/compact_vector.h9
-rw-r--r--library/cpp/containers/compact_vector/compact_vector_ut.cpp3
2 files changed, 7 insertions, 5 deletions
diff --git a/library/cpp/containers/compact_vector/compact_vector.h b/library/cpp/containers/compact_vector/compact_vector.h
index cff5345ee2..c055bd49da 100644
--- a/library/cpp/containers/compact_vector/compact_vector.h
+++ b/library/cpp/containers/compact_vector/compact_vector.h
@@ -234,15 +234,16 @@ public:
}
template <class... Args>
- void EmplaceBack(Args&&... args) {
+ T& EmplaceBack(Args&&... args) {
Reserve(Size() + 1);
- new (Ptr + Size()) T(std::forward<Args>(args)...);
+ auto* t = new (Ptr + Size()) T(std::forward<Args>(args)...);
++(Header()->Size);
+ return *t;
}
template <class... Args>
- void emplace_back(Args&&... args) {
- EmplaceBack(std::forward<Args>(args)...);
+ T& emplace_back(Args&&... args) {
+ return EmplaceBack(std::forward<Args>(args)...);
}
T& Back() {
diff --git a/library/cpp/containers/compact_vector/compact_vector_ut.cpp b/library/cpp/containers/compact_vector/compact_vector_ut.cpp
index 5aac5303f3..e576ac3a95 100644
--- a/library/cpp/containers/compact_vector/compact_vector_ut.cpp
+++ b/library/cpp/containers/compact_vector/compact_vector_ut.cpp
@@ -62,7 +62,8 @@ Y_UNIT_TEST_SUITE(TCompactVectorTest) {
};
TCompactVector<TFoo> vector;
- vector.emplace_back(123);
+ auto& x = vector.emplace_back(123);
+ UNIT_ASSERT_VALUES_EQUAL(&x, &vector.back());
UNIT_ASSERT_VALUES_EQUAL(vector.back().ConstructedFrom, "int");
vector.emplace_back('c');
UNIT_ASSERT_VALUES_EQUAL(vector.back().ConstructedFrom, "char");