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