我管理一个包含很多模板类的大型复杂代码。 我想禁止在代码中使用
std::vector<bool>
(因为这是编译问题的一个反复出现且痛苦的原因)。我可以 grep std::vector<bool>
,但是当其他 tempplaces 类中使用的模板类实例化模板向量(结果是 bool 向量)时,我无法轻松找到。
是否有 gcc 警告、工具或技巧来查找代码实例化
std::vector<bool>
的情况?
在代码中它可能看起来像这样:
#include <vector>
#include <type_traits>
template<typename T>
struct CurrentVersion
{
std::vector<T> data;
};
template<typename T, typename U = std::enable_if_t<!std::is_same_v<bool,T>>>
struct RefactoredVersion /* in practice do not rename and keep using CurrentVersion, this is just to demo it */
{
};
int main()
{
CurrentVersion<int> cv;
RefactoredVersion<int> rv;
CurrentVersion<bool> cvb;
RefactoredVersion<bool> rvb; // <== no longer compiles (too few template arguments)
return 0;
}