【发布时间】:2011-12-20 05:16:51
【问题描述】:
你好,祝你有美好的一天。
以下代码片段在 cl.exe (15.00.30729.01) 和 mingw-g++ (4.4.0) 上编译:
template<typename T> class Test{
public:
T t;
void error(){
int doesNotExist = 6;
return doesNotExist;//<---- void function returning result
}
};
int main(int argc, char** argv){
Test<int> test;
return 0;
}
此外,在 cl.exe 上,您甚至可以摆脱这种情况:
template<typename T> class Test{
public:
T t;
void error(){
doesNotExist = 6;//<---- undeclared variable
return doesNotExist;//<---- void function returning result
}
};
现在,这显然是因为编译器不会为模板类的方法创建内容,直到有人调用它们。但是,当您设计大型模板类时,这可能会带来问题(因为您很可能忘记在某处向新方法添加测试调用)。
问题:
是否有用于 g++ 或 cl.exe 的编译器开关会强制编译器处理整个模板(因此此代码片段会触发编译错误)?
【问题讨论】:
标签: c++ visual-studio-2008 templates visual-c++ g++