![]() |
1
5
这不是有效的C++代码。
该格式错误的模板的诊断消息可以延迟到编译器实例化,但如果编译器运行良好,它将更早地诊断错误。即使在模板被实例化时也不为该代码提供任何诊断消息的编译器也不符合要求。它与未命名的命名空间无关。 另外,请注意,即使将未命名的命名空间放在该模板之上,如果在多个翻译单元中定义并调用该模板,也不会是一个有效的C++程序。这是因为具有相同模板参数的同一模板的不同实例化将引用不同的内容(未命名命名空间中的字符串每次在另一个转换单元中定义时都将生成不同的对象)。这样的程序的行为将是未定义的。 |
![]() |
2
0
记住include只是将.h文件的内容复制到.cpp文件中。所以,f()的定义出现在test的定义之前。最好的解决办法是
在.h文件的顶部。 |
![]() |
3
0
此测试未通过 Comeau online compiler 它在过去被证明是最符合标准的编译器之一。因此,我倾向于认为代码是不正确的,尽管我不能在标准中指出原因。不过,请注意,在宽松模式下编译代码会成功。 |