clang-tools 22.0.0git
clang::tidy::bugprone::MoveForwardingReferenceCheck Class Reference

The check warns if std::move is applied to a forwarding reference (i.e. More...

#include <MoveForwardingReferenceCheck.h>

Inheritance diagram for clang::tidy::bugprone::MoveForwardingReferenceCheck:
[legend]

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

Detailed Description

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.

Constructor & Destructor Documentation

◆ MoveForwardingReferenceCheck()

clang::tidy::bugprone::MoveForwardingReferenceCheck::MoveForwardingReferenceCheck ( StringRef Name,
ClangTidyContext * Context )
inline

Definition at line 36 of file MoveForwardingReferenceCheck.h.

Member Function Documentation

◆ check()

void clang::tidy::bugprone::MoveForwardingReferenceCheck::check ( const ast_matchers::MatchFinder::MatchResult & Result)
override

◆ isLanguageVersionSupported()

bool clang::tidy::bugprone::MoveForwardingReferenceCheck::isLanguageVersionSupported ( const LangOptions & LangOpts) const
inlineoverride

Definition at line 38 of file MoveForwardingReferenceCheck.h.

◆ registerMatchers()

void clang::tidy::bugprone::MoveForwardingReferenceCheck::registerMatchers ( ast_matchers::MatchFinder * Finder)
override

Definition at line 71 of file MoveForwardingReferenceCheck.cpp.


The documentation for this class was generated from the following files: