2

我目前坚持使用 g++ 4.4.7,我尝试使用它(使用 -std=gnu++0x 标志)来编译使用“foreach”构造的 c++ 程序:

190: void
191: Block::get_record_types(D_RecordType_Vector& record_type_vector) const {
192:    for ( D_Record_Map::value_type rt_v_i  : _records) { 
193:
194:        record_type_vector.push_back(rt_v_i.first);
195:    }
196: }

第一个错误让我认为它只是没有识别构造:

./c/Block.cpp:192: error: expected initializer before ':' token
./c/Block.cpp:196: error: expected primary-expression before '}' token
./c/Block.cpp:196: error: expected ';' before '}' token
./c/Block.cpp:196: error: expected primary-expression before '}' token
./c/Block.cpp:196: error: expected ')' before '}' token
./c/Block.cpp:196: error: expected primary-expression before '}' token
./c/Block.cpp:196: error: expected ';' before '}' token

这在 Apple clang-425 上正确编译。

我意识到 g++4.4.7 是旧的,但考虑到编译器标志,它甚至不应该识别新结构吗?

4

2 回答 2

9

不,在 GCC 4.6 中添加了支持,请参阅http://gcc.gnu.org/gcc-4.6/changes.html#cplusplushttp://gcc.gnu.org/projects/cxx0x.html

我意识到 g++4.4.7 是旧的,但考虑到编译器标志,它甚至不应该识别新结构吗?

不,为什么要这样?您建议有人修改 C++ 解析器以理解新功能,只是为了拒绝它。那将是浪费时间——如果有人有时间修改解析器,为什么不添加对该功能的支持呢?否则他们必须修改代码,添加测试用例(测试它不支持该功能)等等。识别新语法的代码更改不会神奇地发生。

于 2013-07-22T16:09:11.207 回答
3

GCC 4.4.0 于2009 年 4 月 23 日发布。基于范围的 for 循环的措辞于2009 年 7 月 16 日完成。我不知道有任何编译器编写者具有预知能力。

于 2013-07-22T17:20:39.137 回答