【发布时间】:2009-09-13 15:38:21
【问题描述】:
考虑以下代码:
template<int* a>
class base {};
int main()
{
base<(int*)0> test;
return 0;
}
Comeau 和 MSVC 都可以毫无问题地编译它(除了 Comeau 关于未使用变量的警告),而 GCC 在 base<(int*)0> test; 行上失败,说明
在函数“int main()”中: 转换为整数或枚举类型以外的类型不能出现在常量表达式中
模板参数 1 无效
它到底在抱怨什么?谁是对的——这段代码应该编译吗?值得注意的是,我的 GCC 版本非常旧(3.4.2),因此可能与它有关。谢谢。
【问题讨论】:
-
仅供参考:使用 gcc 4.4.1:test.cpp:6:错误:转换为整数或枚举类型以外的类型不能出现在常量表达式中 test.cpp:6:错误: 模板参数 1 无效 test.cpp:6: 错误: ';' 之前的声明类型无效令牌
-
感谢 jdehaan,所以我们知道这与我的版本无关。
-
欢迎您。我尝试稍微修改代码以使其编译。细微的变化并不能说明问题...
-
open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#354 的缺陷报告提供了洞察力。似乎喜剧演员认为该标准在这一点上过于严格并允许它,很清楚它会在稍后(2005年)的标准中得到解决和允许。当然,缺陷记者约翰斯派塞为科莫工作。 xD
-
很好,感谢链接 litb,这正是我想要做的事情:D
标签: c++ templates gcc compiler-construction