[clang-tools-extra] [clang-tidy] Fix false positive in bugprone-use-after-move for std::tie (PR #192895)
Baranov Victor via cfe-commits
cfe-commits at lists.llvm.org
Wed May 6 07:29:16 PDT 2026
================
@@ -1789,4 +1790,55 @@ void Run() {
RegularReset(db6);
db6.Query();
}
+
} // namespace custom_reinitialization
+
+// Tests for std::tie() reinitialization.
+std::pair<std::string, std::string> makeStringPair(std::string a,
+ std::string b);
+
+void stdTieIsReinit() {
+ // std::tie on the LHS reinitializes all captured variables.
+ std::string a, b;
+ std::move(a);
+ std::move(b);
+ std::tie(a, b) = makeStringPair("x", "y"); // no-warning: both reinitialized
+ a.size();
+ b.size();
+}
+
+void stdTieWithIgnore() {
+ // std::ignore placeholder does not prevent reinitialization of named variables.
+ std::string a;
+ std::move(a);
+ std::tie(a, std::ignore) = makeStringPair("x", "y"); // no-warning: a reinitialized
+ a.size();
+}
+
+void stdTieIgnoreFlipped() {
+ // std::ignore in first position still reinitializes named variables.
+ std::string a;
+ std::move(a);
+ std::tie(std::ignore, a) = makeStringPair("x", "y"); // no-warning: a reinitialized
+ a.size();
+}
+
+void stdTiePartialReinit() {
+ // Only variables named in std::tie are reinitialized.
+ std::string a, b;
+ std::move(a);
+ std::tie(b) = std::make_tuple(std::string("y")); // reinitializes b, not a
----------------
vbvictor wrote:
can add another test with `tie(c, b, ignore); a.size(), b.size()`.
https://github.com/llvm/llvm-project/pull/192895
More information about the cfe-commits
mailing list