摘自大卫,尼古拉的书 - C++模板:完整指南
因此,模板编译两次:
- 在没有实例化的情况下,检查模板代码本身的语法是否正确.发现语法错误,例如缺少分号.
- 在实例化时,检查模板代码以确保所有调用都有效.发现无效调用,例如不支持的函数调用.
保持第一点,我写道 -
template<typename T>
void foo( T x)
{
some illegal text
}
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它在Visual Studio 2010上构建正常,没有关闭优化的任何警告.但是,它在gcc-4.3.4上失败了.哪一个符合C++标准?即使没有模板实例化,模板代码也必须编译吗?