[PATCH] D141569: [clang-tidy] Implement CppCoreGuideline F.18
Chris Cotter via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 20 20:54:32 PST 2023
ccotter marked 4 inline comments as done.
ccotter added inline comments.
================
Comment at: clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/rvalue-reference-param-not-moved.cpp:45
+template <typename T>
+void never_moves_param_template(Obj&& o, T t) {
+ // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: rvalue reference parameter is never moved from inside the function body [cppcoreguidelines-rvalue-reference-param-not-moved]
----------------
ccotter wrote:
> carlosgalvezp wrote:
> > Could we add something like this too?
> >
> > ```
> > template <typename T>
> > struct Foo
> > {
> > void never_moves(T&& t) {}
> > };
> > ```
> >
> > Here `t` is not a universal reference so the check should warn.
> Done in the `AClassTemplate::never_moves` test.
@carlosgalvezp Note I've changed the check to not flag `never_moves` based on more recent discussion. I do think this code should flag, although I'm a little torn. If `Foo` constrains `T` to be a reference, then `Foo<Obj&>::never_moves` is "OK", although I think it's still confusing as `never_moves` could instead accept `T&`.
I'll need to rethink this a bit, but I've never the test in place with a `FIXME` and brief comment explaining the situation.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D141569/new/
https://reviews.llvm.org/D141569
More information about the cfe-commits
mailing list