Fel*_*bek 3 c++ compiler-warnings argument-dependent-lookup clang-tidy
当参数类型位于命名空间中时,可以省略sstd::的命名空间(通常是这种情况)。<algorithm>是否有任何警告或整齐的规则可以发现此类遗漏?
#include <vector>
#include <algorithm>
std::vector<int> v;
for_each(v.begin(), v.end(), [](auto){});
return 0;
Run Code Online (Sandbox Code Playgroud)
上面的示例使用最新的 clang 和 -Wall、-Wextra 和 -Wpedantic 编译,不会发出任何诊断信息:
tidy 中有一个开放的更改可以用来标记这一点:
[补丁]总结
此补丁添加了
bugprone-unintended-adl不在提供的白名单上使用 ADL 的标记。容易出错的意外 ADL
查找 ADL(参数相关查找)的用法,或模板情况下的潜在 ADL,这些用法不在所提供的允许标识符和命名空间列表中。[...]
.. 选项::
IgnoreOverloadedOperators如果非零,则忽略使用运算符语法(例如
a + b)对重载运算符的调用,但不忽略函数调用语法(例如operator+(a, b))。默认为1... 选项::
AllowedIdentifiers检查忽略的以分号分隔的名称列表。默认为
swap;make_error_code;make_error_condition;data;begin;end;rbegin;rend;crbegin;crend;size;ssize;empty... 选项::
AllowedNamespaces以分号分隔的命名空间名称列表(例如
foo;bar::baz)。如果检查发现解析为该列表中的命名空间中的函数的不合格调用,则该调用将被忽略。默认是一个空列表。
不过,自 2020 年 7 月以来,该补丁似乎没有任何活动,但如果 OP 对此感兴趣,OP 可以尝试恢复该补丁。
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |