我仔细检查了我的代码库,发现一些typedef包括模板参数被具体类型错误地替换了。我设法通过此示例文件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
替换为using
,但是奇怪的是,第三和第四typedef将T
替换为{ {1}}:
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
,正如预期的那样。由于某种原因,只有在有11个或更多的typedef时,才会出现这种情况。
这是一个已知的错误吗?有没有解决方法,所以我可以让clang-tidy自动应用修补程序而不会错误地替换一堆typedef?