clang-tools 22.0.0git
|
The check warns if std::move is applied to a forwarding reference (i.e. More...
#include <MoveForwardingReferenceCheck.h>
Public Member Functions | |
MoveForwardingReferenceCheck (StringRef Name, ClangTidyContext *Context) | |
bool | isLanguageVersionSupported (const LangOptions &LangOpts) const override |
void | registerMatchers (ast_matchers::MatchFinder *Finder) override |
void | check (const ast_matchers::MatchFinder::MatchResult &Result) override |
The check warns if std::move is applied to a forwarding reference (i.e.
an rvalue reference of a function template argument type).
If a developer is unaware of the special rules for template argument deduction on forwarding references, it will seem reasonable to apply std::move to the forwarding reference, in the same way that this would be done for a "normal" rvalue reference.
This has a consequence that is usually unwanted and possibly surprising: if the function that takes the forwarding reference as its parameter is called with an lvalue, that lvalue will be moved from (and hence placed into an indeterminate state) even though no std::move was applied to the lvalue at the call site. The check suggests replacing the std::move with a std::forward.
For the user-facing documentation see: https://clang.llvm.org/extra/clang-tidy/checks/bugprone/move-forwarding-reference.html
Definition at line 34 of file MoveForwardingReferenceCheck.h.
|
inline |
Definition at line 36 of file MoveForwardingReferenceCheck.h.
|
override |
Definition at line 94 of file MoveForwardingReferenceCheck.cpp.
References clang::tidy::bugprone::replaceMoveWithForward().
|
inlineoverride |
Definition at line 38 of file MoveForwardingReferenceCheck.h.
|
override |
Definition at line 71 of file MoveForwardingReferenceCheck.cpp.