请考虑以下代码:
struct Undefined;
template <typename T>
void TemplateFunction()
{
Undefined obj;
}
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我总是认为模板函数和模板方法(或模板类的方法部分)只会检查语法(除非它们被实例化),在这种情况下上面的代码应该编译.
问题是,它不与Xcode的编译(版本:4.3.2,使用LLVM编译器)和现在我想知道上面的代码是否是非标准即它应该不会对符合C++ 03标准编译器编译?Xcode的错误是:
变量具有不完整类型"未定义"
请注意,在原始代码中,未定义的对象是静态断言的一部分.
编译器拒绝代码是正确的,即使其他编译器很乐意接受它.特别是引用将在§14.6[temp.res]/8之内
[...]如果无法为模板定义生成有效的特化,并且未实例化该模板,则模板定义格式错误,无需诊断.[...]如果非依赖名称中使用的类型在定义模板但在完成实例化时完成,并且该类型的完整性影响是否不完整该程序格式正确或影响程序的语义,程序格式不正确; [...]
也就是说,虽然编译器不需要诊断它,但模板格式不正确.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |