【发布时间】:2012-04-11 06:31:18
【问题描述】:
假设我有课程Foo。以下工作正常:
class Foo
{
public:
const int* bar;
Foo()
{
bar = new int[2] {1, 2};
}
};
但是,我尝试稍微改变一下以使用模板:
template<int A, int B>
class Foo
{
public:
const int* bar;
Foo()
{
bar = new int[2] {A, B};
}
};
我对模板工作方式的理解是,A 和 B 本质上是编译时常量,所以它应该仍然可以正常工作。
编译with g++(链接中的4.5,与4.6.3相同的错误)时收到的错误消息是:
错误:ISO C++ 禁止在数组 new [-fpermissive] 中初始化
With 4.7 出现类似错误,但略有不同:
错误:数组 new [-fpermissive] 中带括号的初始化程序
这个问题也出现在模板函数中,而不仅仅是在大括号中使用模板参数进行初始化时,code and output。 (感谢菲利普)
【问题讨论】:
-
你是在 C++11 模式下编译吗?
-
ideone.com/h7K7y 有趣。
-
在这两种情况下我都使用
-std=c++0x进行编译。 Mooing Duck 的结果与我得到的完全一样(我有时看错了 ideone)。 -
看起来像一个 GCC 错误。标准允许,clang 接受。
-
可以用更简单的代码来引发这种情况,例如gist.github.com/2220810 以
g++-4.7 -std=c++11 -Wall -Wextra失败。