【发布时间】:2012-01-01 19:02:31
【问题描述】:
除非我弄错了,否则应该可以通过以下方式创建 std:array:
std::array<std::string, 2> strings = { "a", "b" };
std::array<std::string, 2> strings({ "a", "b" });
然而,使用 GCC 4.6.1 我无法让其中任何一个工作。编译器只是说:
expected primary-expression before ',' token
然而初始化列表在 std::vector 上工作得很好。那么它是哪一个?我是否误以为 std::array 应该接受初始化列表,或者 GNU 标准 C++ 库团队搞砸了?
【问题讨论】:
-
我不确定这是否应该工作(我不是最新的 0x 东西)但是,无论是否有错误,我认为这是因为您使用
std::string和字符串文字。你试过用std::string()包装字符串文字吗? -
@Chris:这适用于 Mac OSX 10.6 上的 gcc 4.6.1。您使用什么编译器选项?
-
@juanchopanza:我正在使用 MinGW-w64 的 TDM 发行版,它有 GCC 4.6.1,我正在使用 -std=c++0x。
-
@Chris。有趣的。我有 4.6.1 的 macports 版本,它使用相同的编译器标志。
-
两者都适用于 gcc-4.6.1 linux 以及带有两组大括号的版本,这确实是最“正确”的。 gcc-4.7 上的所有三个 ICE。提交错误报告。