一,模板如下:
#pragma once #include<cstdio> template<typename T1> class TestSpecializeBug { public: TestSpecializeBug() { printf("基础模板\n"); } void Func() { //这一行是导致问题的原因 TestSpecializeBug<int*> ot1; //Flag } }; template<typename T1> class TestSpecializeBug<T1*> { public: TestSpecializeBug() { printf("特化版本\n"); } };
二,调用测试
int main() { TestSpecializeBug<int*> tps; }
三,输出结果
四,结论
Func函数的Flag标记行是导致问题的原因,如果注释掉这行,则main函数中的TestSpecializeBug<int*> tps语句将会匹配到偏特化的版本,输出:特化版本
C++模板特化的一个BUG?
于 2022-03-25 11:33:58 首次发布