请考虑以下代码:
template<int* a>
class base {};
int main()
{
base<(int*)0> test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Comeau和MSVC都没有问题编译(除了关于未使用的变量的Comeau警告),而GCC base<(int*)0> test;在线路上失败,说明
在函数`int main()'中:强制转换为除积分或枚举类型以外的类型不能出现在常量表达式中
模板参数1无效
究竟是什么抱怨的?谁是对的 - 这段代码应该编译吗?值得注意的是,我的GCC版本非常陈旧(3.4.2),因此可能与它有关.谢谢.