我在选择的代码库上运行了 clang-tidy,并注意到一些类型定义,包括模板参数被错误地替换为具体类型。我设法用这个示例文件 test.cc 至少复制了其中一个问题:
template <typename T>
struct Test
{
typedef T test_1;
typedef T test_2;
typedef T test_3;
typedef T test_4;
typedef T test_5;
typedef T test_6;
typedef T test_7;
typedef T test_8;
typedef T test_9;
typedef T test_10;
typedef T test_11;
};
int main()
{
Test<int> test;
return 0;
}
在此文件上运行clang-tidy-6.0 -checks=modernize* test.cc
会导致警告将所有typedef
s替换为using
s,但奇怪的是,第三个和第四个 typedef 替换T
为int
:
/home/john/test/test.cc:6:2: warning: use 'using' instead of 'typedef' [modernize-use-using]
typedef T test_3;
^~~~~~~~~~~~~~~~~
using test_3 = int
/home/john/test/test.cc:7:2: warning: use 'using' instead of 'typedef' [modernize-use-using]
typedef T test_4;
^~~~~~~~~~~~~~~~~
using test_4 = int
T
正如预期的那样,其余的人都有。出于某种原因,这种行为似乎只在有 11 个或更多类型定义时才会发生。
这是一个已知的错误?有没有一种解决方法,所以我可以让 clang-tidy 自动应用修复,而不会错误地替换一堆 typedef?