所以我尝试编译下面的代码,但它失败了(如预期的那样):
1.cpp: In function ‘int foo()’:
1.cpp:3:5: error: ‘some’ was not declared in this scope
some ill-formed code
^
但是如果我删除这一行,编译器会编译它而不会出现任何错误(也可以预期,因为T
类型是否有random_name()
方法是未知的)。
似乎未使用(未实例化)的模板的诊断在某种程度上是实现定义的。但也许标准对这种情况有一些要求。例如,编译下面的代码是否符合标准而没有任何错误?
我试图在网站上搜索答案,但找不到任何相关问题。
template <class T>
int foo() {
some ill-formed code
return T::random_name();
}
template <>
int foo<int>() { return 0; }
int main() {
return foo<int>();
}