考虑下面的代码:铸造指针作为模板参数:科莫和MSVC编译,GCC失败
template<int* a>
class base {};
int main()
{
base<(int*)0> test;
return 0;
}
两个科莫和MSVC编译这个没有问题(除了科莫警告有关未使用的变量),而GCC失败在base<(int*)0> test;
线,说明
In function `int main()': a casts to a type other than an integral or enumeration type cannot appear in a constant-expression
template argument 1 is invalid
究竟它是什么抱怨?谁是对的 - 这个代码是否应该编译?值得注意的是我的GCC版本是极其旧的(3.4.2),所以可能与它有关。谢谢。
供参考:用gcc 4.4.1: TEST.CPP:6:错误:流延到不是整型或枚举型的类型中不能出现一个常数表达式 TEST.CPP:6:错误:模板参数1无效 test.cpp:6:错误:在';'之前的声明中的无效类型' token – jdehaan 2009-09-13 15:45:07
谢谢jdehaan,所以我们知道这与我的版本无关。 – GRB 2009-09-13 15:45:55
我欢迎你。我试着修改一下代码来编译它。轻微的变化不能说明问题... – jdehaan 2009-09-13 15:50:46